数据结构课程设计

发布 2022-10-01 21:07:28 阅读 4136

课程设计综合成绩评定。

设计题目一: 二叉排序树。

设计题目二: 最短路径问题。

设计题目三。

知二叉排序树的二叉链表存储结构的类型定义如下:

typedef struct node

int data用整数表示一个结点的名。

struct node *lchild,*rchild; /左右指针域。

bstnode,*bstree;

1)键盘输入一个元素序列创建一棵如图(1)的二叉排序树,并输出该二叉排序树的中序遍历序列;

图(1)(2)在图(1)中所得的二叉排序树中插入一个值为58的结点,输。

出它的中序遍历序列;

3)在题(2)中所得的二叉排序树中删除值为45的结点,输出它的中序遍历序列;

4)我们知道教材中p220给出的二叉排序树的删除操作算法中,是用左子树中最右下结点来替代要被删除的结点(即为要被删除结点的中序前驱),也可以用右子树中最左下结点来替代要被删除的结点(即为要被删除结点的中序后继),根据此思路修改p220算法在写一个删除操作,并利用修改后的删除算法删除图(1)中二叉排序树的值为45的结点,输出它的中序遍历序列;

5)利用题(2)中所得的二叉排序树的所有叶子结点构造一个带头结点的单链表l。要求不能破坏这棵二叉排序树。所得的单链表l元素递增,并输出单链表l。

6)设计算法将图(1)的二叉排序树的左右子树进行交换。最后输出所得到的二叉树的中序遍历序列。

所得二叉排序树如图所示:

图(2)7)用计算法统计并输出图(1)中所得的二叉排序树中只有一个孩子结点的结点个数。

8)由图(1)的二叉排序树,用计算法并编写程序输出结点40的所有祖先结点。

1.二叉排序树应用的存储结构。

typedef struct node二叉排序树的存储结构。

int data

struct node *lchild,*rchild;

}bstnode,*bstree;

typedef struct lnodelnode,*linklist;

二叉排序树的设计用到了单链表l。

单链表l主要用于题(5)的设计,用来存储图(1)的二叉排序树中所有叶子结点,并将其输出。

2.方案设计。

本方案设计主要应用二叉树的性质。创建空二叉排序树t,再输入图(1)中的元素后向t插入所有元素,在插入时比根结点小的放在树的左子树,比根结点大则放在树的右子树,同时树的左右子树也要遵循这个规律。

在删除操作中当只有一个结点时可直接删除,否则用左子树中最右下结点来替代要被删除的结点进行删除操作,亦可用右子树中最左下结点来替代要被删除的结点进行删除操作,可视为同种删除方法。

寻找叶子节点时主要采用递归方法,从根结点开始遍历当发现结点无左右孩子时则得到当前的结点元素并用尾插法将其放入单链表中直至遍历完毕,最后输出单链表l。

在二叉排序树进行左右子树交换时新创建树r避免对树t的干扰,把树t复制给树r,调用树r采用递归法和交换法进行左右子树的交换。

寻找只有一个孩子结点的结点个数时也是采用递归法,从根结点开始遍历当发现结点只有左孩子或右孩子是则计数加1直至遍历完毕,输出最后的计数。

在取某元素的祖先结点时,从根结点与该元素对比并寻找该元素,其所走路径即为该元素的祖先结点路径,因此用数组将该路径存储起来,并将其输出。

3.设计程序的整体功能结构(整体算法的描述)

void create(bstree &t):用来创建树,输入树的所有元素;

int search(bstree t,int k,bstree &q):对树进行查找,判断元素是否存在树中;

void insert(bstree &t,int e):对树进行元素插入;

void deletebst(bstree &t,int k,int &e):删除中序前驱,用左子树中最右下结点来替代要被删除的结点;

void deletebst1(bstree &t,int k,int &e):删除中序后驱,用右子树中最左下结点来替代要被删除的结点;

void outtree(bstree &t):中序遍历函数,并输出t;

int createlist(linklist &l): 创建单链表l并为空;

int insertlist(linklist &l,int e):用尾插法向单链表插入元素;

void leaf(bstree t,linklist &l):得到树t的叶子节点,并得到其结点;

void outlist(linklist l):输出点链表;

bstree copy(bstree t):创建树r,把树t复制给r;

void create1(bstree &r):把树r的左右子树进行交换;

int jie(bstree r):计算只有一个孩子结点元素的个数;

void bstree(bstree r,int e):得到某元素的祖先结点并将其输出;

int main():主函数;

#include <>

#include <>

#define true 1

#define false 0

#define max 20

typedef struct node二叉排序树的存储结构

int data用整数表示一个结点的名。

struct node *lchild,*rchild; /左右指针域。

}bstnode,*bstree;

typedef struct lnodelnode,*linklist;

创建树函数:

void create(bstree &t)

else if(kdata)

f=p;p=p->lchild;}

elsef=p;

p=p->rchild;}

q=f;return false;

对树进行插入函数:

void insert(bstree &t,int e)

else{ if(!search(t,e,q))

数据结构课程设计

课程设计说明书 题目哈夫曼编码问题的设计和实现。课程名称数据结构课程设计。院 系 部 中心。专业。班级。学生姓名。学号。设计地点。指导教师。设计起止时间 2008 年6月 2日至 2008 年 6月 6 日。目录。1 问题描述 2 1.1 题目内容 2 1.2 基本要求 2 1.3 测试数据 2 2...

数据结构课程设计

数据结构 课程设计。实验报告。学院 信息工程学院。班级 姓名 学号 指导老师 题目2 一元多项式的计算。1 实验目的。1 掌握链表的灵活运用 2 学习链表初始化和建立一个新的链表 3 知道怎样去实现链表删除结点操作与插入结点 4 理解链表的基本操作 包括数据域数据的相加 并能灵活运用。2 实验内容。...

数据结构课程设计

班级 信计 1102 姓名 李娜娜。学号 1108060209 设计日期 2013.07.15 西安科技大学计算机学院 1.实验题目 编制一个演绎扫雷游戏的程序。2.问题描述。做一个n x m的扫雷游戏,每个方格包含两种状态 关闭 closed 和打开 opened 初始化时每个方格都是关闭的,一个...