数据结构二叉排序树的实现(用顺序和二叉链表作存储结构)课程设计
数据结构实验指导书(新版)
《数据结构和算法》
实验指导书
实验及学时数分配
序号实验名称学时数(小时)
1 实验一线性表 4
2 实验二树和二叉树 2
3 实验三图 2
4 实验四查找 2
5 实验五内部排序 2
合计12
几点要求:
一、上机前:认真预习相关实验内容,提前编写算法程序,上机时
检查(未提前编写程序者,扣除平时成绩中实验相关分数)。二、上机中:在Turbo C或VC6.0环境中,认真调试程序,记录调
试过程中的问题、解决方法以及运行结果。上机时签到;下机时验收签字。
三、下机后:按要求完成实验报告,并及时提交(实验后1周内)。
实验一线性表
【实验目的】
1、掌握用Turbo c上机调试线性表的基本方法;
2、掌握线性表的基本操作,插入、删除、查找以及线性表合并等运算在顺序存储结
构和链式存储结构上的运算;
3、运用线性表解决线性结构问题。
【实验学时】
4 学时
【实验类型】
设计型
【实验内容】
1、顺序表的插入、删除操作的实现;
2、单链表的插入、删除操作的实现;
3、两个线性表合并算法的实现。(选做)
【实验原理】
1、当我们在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线
性表中第i个元素之后的所有元素依次后移一个位置,以便腾出一个位置,再把
新元素插入到该位置。若是欲删除第i个元素时,也必须把第i个元素之后的所有
元素前移一个位置;
2、当我们在线性表的链式存储结构上的第i个位置上插入一个元素时,只需先确定
第i个元素前一个元素位置,然后修改相应指针将新元素插入即可。若是欲删除
第i个元素时,也必须先确定第i个元素前一个元素位置,然后修改相应指针将该
数据结构大作业实验报告
物理与信息工程学院数据结构实验大作业报告
专业:计算机科学与技术
班级:19计算机科学与技术
学号:
姓名:
2020年 12 月
树表的查找
一、问题描述:
由于折半查找中要求表中记录按关键字有序排列,且不能用链表做存储结构,因此,当表的插入或删除操作频繁时,为维护表的有序性,需要移动表中很多记录。这种由移动记录引起的额外时间开销,就会抵消折半查找的优点。所以,线性表的查找更适用于静态查找表,若要对动态查找表进行高效率的查找,可采取集中特殊的二叉树作为查找表的组织形式,在此将它们叫做树表。
二、设计:
二叉排序树(Binary Sort Tree)1.二叉排序树的定义
二叉排序树,又叫二叉查找树或二叉搜索树。它或是一棵空树;或是具有下列性质的二叉树:
(1)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)它的左、右子树也分别为二叉排序树。
2.二叉链表存储表示算法实现如下:
Typedef int KeyType;
typedef struct node
{
KeyType key ; /*关键字的值*/
struct node *lchild,*rchild;/*左右指针*/
}BSTNode, *BSTree;
3.二叉排序树的创建
可以将树结点逐个插入到二叉排序树(一开始可以是一颗空树)中,只要保证插入后,依然满足二叉排序树的特点,就可以创建一个二叉排序树。
设树结点的关键字值为key
算法思想:
(1)若二叉排序树是空树,则将key结点成为二叉排序树的根结点。(2)若二叉排序树非空树,则将key与二叉排序树的根进行比较:
(完整)数据结构算法设计题
一、算法设计题
1。设二叉树bt采用二叉链表结构存储。试设计一个算法输出二叉树中所有非叶子结点,并求出非叶子结点的个数。
【答案】
int count=0;
void algo2(BTNode *bt){
if (bt){
if(bt->lchild || bt—〉rchild){
printf(bt—>data);
count++;
}
algo2(bt->lchild);
algo2(bt—〉rchild);
}
}
2。阅读下列函数arrange()
int arrange(int a[],int 1,int h,int x)
{//1和h分别为数据区的下界和上界
int i,j,t;
i=1;j=h;
while(i〈j){
while(i<j && a[j]>=x)j—-;
while(i〈j && a[j]>=x)i++;
if(i〈j)
{ t=a[j];a[j]=a[i];a[i]=t;}
}
if(a[i]<x) return i;
else return i-1;
}
(1)写出该函数的功能;
(2)写一个调用上述函数实现下列功能的算法:对一整型数组b[n]中的元素进行重新排列,将所有负数均调整到数组的低下标端,将所有正数均调整到数组的高下标端,若有零值,则置于两者之间,并返回数组中零元素的个
数。
【答案】
(1)该函数的功能是:调整整数数组a[]中的元素并返回分界值i,使所有<x的元素均落在a[1。.i]上,使所有≥x的元素均落在a[i+1.。h]上。
(2)int f(int b[],int n) 或 int f(int b[],int n)
数据结构课程设计(附代码)-数据结构设计
上海应用技术学院课程设计报告
课程名称《数据结构课程设计》
设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级
姓名学号指导教师日期
一.目的与要求
1. 巩固和加深对常见数据结构的理解和掌握
2. 掌握基于数据结构进行算法设计的基本方法
3. 掌握用高级语言实现算法的基本技能
4. 掌握书写程序设计说明文档的能力
5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力
表。
3、输出功能:void print(LinkList *head);
通过一个while的循环控制语句,在指针p!=NULL时,完成全部学生记录的显示。知道不满足循环语句,程序再次回到菜单选择功能界面。
4、删除功能:LinkList *Delete(LinkList *head);
按想要删除的学生的学号首先进行查找,通过指针所指向结点的下移来完成,如果找到该记录,则完成前后结点的连接,同时对以查找到的结点进行空间的释放,最后完成对某个学生记录进行删除,并重新存储。
5、插入功能:LinkList *Insert(LinkList *head);
输入你想插入的位置,通过指针所指向结点的下移,找到该位置,将该新的学生记录插入到该结点,并对该结点后面的指针下移。链表长度加一,重新存储。
(5) 程序的输入与输出描述
输入:调用LinkList *create()函数,输入学生的姓名、学号、三门功课的成绩;
输出:调用void print(LinkList *head)函数,输出学生的记录。
《数据结构与算法》课程设计题目及要求
《数据结构与算法》课程设计题⽬及要求
北⽅民族⼤学课程设
计
课程名称: 数据结构与算法
院(部)名称:信息与计算科学学院
组长姓名学号
同组⼈员姓名
指导教师姓名:纪峰
设计时间:2010.6.7----2009.6.27
⼀、《数据结构与算法》课程设计参考题⽬
(⼀)参考题⽬⼀(每位同学选作⼀个,同组⼈员不得重复)
1、编写函数实现顺序表的建⽴、查找、插⼊、删除运算。
2、编写函数分别实现单链表的建⽴、查找、插⼊、删除、逆置算法。
3、编写函数实现双向链表的建⽴、插⼊、删除算法。
4、编写函数实现顺序栈的进栈、退栈、取栈顶的算法。
5、编写函数实现链栈的进栈、退栈、取栈顶的算法。
6、编写函数实现双向顺序栈的判空、进栈、出栈算法。
7、编写函数实现循环队列的判队空、取队头元素、⼊队、出队算法。
8、编写函数实现链环队列的判队空、取队头节点、⼊队、出队算法。
9、编写函数实现串的,求串长、连接、求字串、插⼊、删除等运算。
10、分别实现顺序串和链串的模式匹配运算。
11、实现⼆叉树的建⽴,前序递归遍历和⾮递归遍历算法。
12、实现⼆叉树的建⽴,中序递归遍历和⾮递归遍历算法。
13、实现⼆叉树的建⽴,后序递归遍历和⾮递归遍历算法。
14、实现⼆叉树的中序线索化,查找*p结点中序下的前驱和后继结点。
15、分别以临接表和邻接矩阵作为存储就够实现图的深度优先搜索和⼴度优先搜索算法。
16、利⽤线性探测处理冲突的⽅法实现散列表的查找和插⼊算法。
(⼆)参考题⽬⼆(每三⼈⼀组,任选三个题⽬完成)
1.运动会分数统计(限1 ⼈完成)
任务:参加运动会有n个学校,学校编号为1……n。⽐赛分成m个男⼦项⽬,和w个⼥⼦项⽬。项⽬编号为男⼦1……m,⼥⼦m+1……m+w。不同的项⽬取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学⽣⾃⼰设定。(m<=20,n<=20)
《数据结构与算法设计》第5章 树
5.3.2 二叉树的链式存储结构
5.3.2 二叉树的链式存储结构
➢ 三叉链表表示法
在二叉链表的节点中增加一个双亲指针域(parent),由该 类节点构成的二叉树的存储结构称为三叉链表。
三叉链表节点结构
5.3.2 二叉树的链式存储结构
5.3.3 二叉树的二叉链表类模板定义
➢ 节点类模板和二叉链表类模板的声明
5.2.2 二叉树的性质
➢ 满二叉树和完全二叉树
满二叉树是指深度为h且节点数取得最大值2h-1的二叉树。 如果一棵深度为h的二叉树,除第h层外,其他每层的节点数 都达到最大,且最后一层的节点自左而右连续分布,这样的二 叉树称为完全二叉树。
5.2.2 二叉树的性质
5.2.2 二叉树的性质
性质6 对含有n个节点的完全二叉树自上而下、同一层从左往右 对节点编号0,1,2,…,n-1,则节点之间存在以下关系: (1)若i=0,则节点i是根节点,无双亲;若i>0,则其双亲节 点的编号为i/2-1; (2)若2×i +1≤n,则i的左孩子编号为2×i+1; (3)若2×i+2≤n,则i的右孩子编号为2×i+2; (4)若i>1且为偶数,则节点i是其双亲的右孩子,且有编号为 i-1的左兄弟; (5)若i<n-1且为奇数,则节点i是其双亲的左孩子,且有编号 为i+1的右兄弟。
数据结构第六章二叉树的应用教案
筛 选 堆 堆
筛选
12 73 81 64 73 55 12 64 98 12 36 27
81 12 98 比较
49 40
是大顶堆
建堆是一个从下往上进行“筛选” 的过程。
98 40
81 55 81 73 36 12 27 98 49 40 49 98
55 73 81
64
12 36
40 , 55 , 49 , 73, 12, 27, 98, 81, 64, 36
对于完全二叉树
r2i 是 ri 的左孩子
ri r2i
12
r2i+1 是 ri 的
右孩子
36 65 40
r2i+1
27 34 14 98
81
73
55
49
不 是堆
堆的抽象数据类型: void InitHeap(HeapType& HBT); void ClearHeap(HeapType& HBT); bool HeapEmpty (HeapType& HBT); void InsertHeap (HeapType& HBT, const ElemType item); ElemType DeleteHeap (HeapType& HBT);
bool Find(BTreeNode* T, ElemType& item) while(T!=NULL) { if(item==T->data) { item=T->data; return true; } else if(item<T->data) T=T->left; //向左子树继续查找 else T=T->right; //向右子树继续查找 return false;}
二叉排序树(二叉链表结构存储)数据结构课程设计报告
二叉排序树(二叉链表结构存储)数据结构课程
设计报告
目录
1需求分析 (1)
1.1课程设计题目、任务及要求 (1)
1.2课程设计思想 (1)
2概要设计 (2)
2.1 二叉排序树的定义 (2)
2.2二叉链表的存储结构 (2)
2.3建立二叉排序树 (2)
2.4二叉排序树的生成过程 (3)
2.5中序遍历二叉树 (3)
2.6二叉排序树的查找 (3)
2.7二叉排序树的插入 (4)
2.8平均查找长度 (4)
3详细设计和实现 (4)
3.1主要功能模块设计 (4)
3.2主程序设计 (5)
4调试与操作说明 (12)
4.1程序调试 (12)
4.2程序操作说明 (13)
总结 (16)
致谢 (17)
参考文献 (19)
1需求分析
1.1课程设计题目、任务及要求
二叉排序树。用二叉链表作存储结构
(1)以(0)为输入结束标志,输入数列L,生成一棵二叉排序树T;
(2)对二叉排序树T作中序遍历,输出结果;
(3)计算二叉排序树T查找成功的平均查找长度,输出结果;
(4)输入元素x,查找二叉排序树T:若存在含x的结点,则删除该结点,并作中序
遍历(执行操作2);否则输出信息“无x”;
1.2课程设计思想
建立二叉排序树采用边查找边插入的方式。查找函数采用递归的方式进行查找。如果查找成功则不应再插入原树,否则返回当前结点的上一个结点。然后利用插入函数将该元素插入原树。
对二叉排序树进行中序遍历采用递归函数的方式。在根结点不为空的情况下,先访问左子树,再访问根结点,最后访问右子树。由于二叉排序树自身的性质,左子树小于根结点,而根结点小于右子树,所以中序遍历的结果是递增的。
数据结构课程设计分类题目
线性表
顺序表:
1、设有一元素为整数的线性表L=(a1,a2,a3,…,a n),存放在一维数组A[N]中,设计一个算法,以表中a n作为参考元素,将该表分为左、右两部分,其中左半部分每个元素小于等于a n,右半部分每个元素都大于a n, a n位于分界位置上(要求结果仍存放在A[N]中)。
2、设线性表存于A[1..size]的前num各分量中,且递增有序。请设计一个算法,将x插入到线性表的适当位置上,以保持线性表的有序性。
3、线性表(a1,a2,a3,…,a n)中元素递增有序且按顺序存储于计算机内。要求设计一算法完成:
(1)用最少时间在表中查找数值为x的元素。
(2)若找到将其与后继元素位置相交换。
(3)若找不到将其插入表中并使表中元素仍递增有序。
4、已知数组A[0:n-1]的元素类型为int,试设计算法将其调整为左右两个部分,左边所有元素为奇数,右边所有元素为偶数。
5、设计一个算法从顺序表L中删除所有值为x的元素
6、设计一个算法从顺序表L中删除所有值为x到y之间(x<=y)的元素
链表:
1、假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。
2、已知L1、L2分别为两循环单链表的头结点指针,m,n分别为L1、L2表中数据结点个数。要求设计一算法,用最快速度将两表合并成一个带头结点的循环单链表。
3、设L为单链表的头结点地址,其数据结点的数据都是正整数且无相同的,设计一个将该链表整理成数据递增的有序单链表的算法。
《数据结构》实验指导书
不能做书的奴隶,而应做书的主人,让书服从我们的意志,供我们运用。《数据结构》实验指导书肇庆学院计算机科学系 编前 言 数据结构是信息与计算科学专业中一门重要的专业基础课程。当用计算机来解决实际问题时,就要涉及到数据的表示及数据的处理,而数据表示及数据处理正是数据结构课程的主要研究对象,通过这两方面内容的学习,为后续课程,特别是软件方面的课程打下了厚实的知识基础,同时也提供了必要的技能训练。因此,数据结构课程在计算机应用专业中具有举足轻重的作用。 本书是针对《数据结构》教程的上机实验指导书,内容包括线性表、栈和队列、串、数组和稀疏矩阵、递归、树状结构、图、查找、排序等。书后附录中给出了学生应提交的实验报告的格式。 本上机实验指导书旨在通过指导学生上机实践,对常用数据结构的基本概念及其不同的实现方法的理论得到进一步的掌握,并对在不同存储结构上实现不同的运算方式和技巧有所体会。 本实验指导书的内容都是基于C语言的,因此,要求学生对C语言要有一定的了解。建议使用Turbo C 2.0或VC++作为实验平台。根据学生的实际情况,本上机实验指导书的内容大多数为基本算法的综合验证,也包括部分算法设计。本上机实验指导书共有9个实验内容,每个实验约为4课时。 由于作者对《数据结构》知识所知有限,书中难免存在错误,恳请读者及时加以指正,以便改进。如有对于本书的意见和建议,请与编者联系,E-mail:lg@。衷心感谢! 编 者 目录前 言实验一 顺序表 1实验二 单链表 3实验三 栈和队列 5实验四 串 7实验五 数组 8实验六 树和二叉树 10实验七 图 12实验八 查找 14实验九 排序 16参考资料 18附录1:肇庆学院计算机系实验报告格式 19附录2:上机实习注意事项 21实验一 顺序表一、预备知识 1.顺序表的存储结构形式及其描述 2.顺序表的建立、查找、插入和删除操作二、实验目的 1.掌握顺序表的存储结构形式及其描述 2.掌握顺序表的建立、查找、插入和删除操作三、实验内容 1.编写函数,输入一组整型元素序列,建立一个顺序表。 2.编写函数,实现对该顺序表的遍历。 3.编写函数,在顺序表中进行顺序查找某一元素,查找成功则返回其存储位置i,否则返回错误信息。 4.编写函数,实现在顺序表的第i个位置上插入一个元素x的算法。 5.编写函数,实现删除顺序表中第i个元素的算法。
2008级数据结构课程设计任务书-2班题目12
34. 教学计划编制问题1
设计要求:针对计算机系本科课程,根据课程之间的依赖关系(如离散数学应在数据结构之前开设)制定课程安排计划,并满足各学期课程数目大致相同。
35. 散列法的实验研究2
散列法中,散列函数构造方法多种多样,同时对于同一散列函数解决冲突的方法也可以不同。两者是影响查询算法性能的关键因素。对于几种典型的散列函数构造方法,做实验观察,不同的解决冲突方法对查询性能的影响。
36. 括号匹配的检验3
[问题描述]
假设表达式中允许有两种括号:圆括号和方括号,其嵌套的顺序随意,即(()[ ])或[([ ] [ ])]等为正确格式,[( ])或(((]均为不正确的格式。检验括号是否匹配的方法可用“期待的紧迫程度”这个概念来描述。例如:考虑下列的括号序列:[ ( [ ] [ ] ) ]
1 2 3 4 5 6 7 8
当计算机接受了第1个括号以后,他期待着与其匹配的第8个括号的出现,然而等来的却是第2个括号,此时第1个括号“[”只能暂时靠边,而迫切等待与第2个括号相匹配的第7个括号“)”的出现,类似的,因只等来了第3个括号“[”,此时,其期待的紧迫程度较第2个括号更紧迫,则第2个括号只能靠边,让位于第3个括号,显然第3个括号的期待紧迫程度高于第2个括号,而第2个括号的期待紧迫程度高于第1个括号;在接受了第4
个括号之后,第3个括号的期待得到了满足,消解之后,第2个括号的期待匹配就成了最急迫的任务了,…… ,依次类推。可见这个处理过程正好和栈的特点相吻合。
[基本要求]
读入圆括号和方括号的任意序列,输出“匹配”或“此串括号匹配不合法”。
数据结构设计说明书书
摘要
数据结构是研究与数据之间的关系,我们称这一关系为数据的逻辑结构,简称数据结构。当数据的逻辑结构确定以后,数据在物理空间中的存储方式,称为数据的存储结构。相同的逻辑结构可以具有不同的存储结构,因而有不同的算法。
本次课程设计,程序中的数据采用“树形结构”作为其数据结构。具体采用的是“二叉排序树”,并且使用“一维数组”来作为其存储结构。一维数组顺序表存储结构是用一组地址连续的存储单元依次自上而下、自左而右存储完全二叉树上的结点元素;本课程设计实现了二叉排序树的创建、中序遍历、计算二叉排序树的平均查找长度和删除二叉排序树中某个结点。
本课程主要介绍了本课题的开发背景,所要完成的功能和开发的过程。重点说明了系统的设计思路、总体设计、各个功能模块的设计与实现方法。
关键词:二叉排序树的实现;C语言;数据结构;线性表;顺序表;中序遍历。
目录
摘要.............................................................. I 1 课题背景的介绍. (1)
1.1 课题背景 (1)
1.2 目的 (1)
2 需求分析 (1)
2.1课程设计题目、任务及要求 (1)
2.2课程设计思想 (2)
3 系统总体设计 (3)
3.1 系统模块划分 (3)
3.2 二叉排序树的生成过程 (3)
3.3 主要功能模块设计 (3)
4 系统详细设计 (5)
4.1 主函数菜单模块 (5)
4.2 查找模块 (6)
4.3 插入模块 (7)
4.4 中序遍历模块 (8)
4.5删除模块 (9)
5 系统连编与运行 (11)
数据结构课程设计
一、数据结构课程设计要求
1.学生必须仔细阅读《数据结构》课程设计方案,认真主动完成课设的要求。有问题及时主动通过各种方式与教师联系沟通。
2.学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时向教师汇报。
3.课程设计按照教学要求需要1周时间完成,学生可以选择设计题目中任意一个,必须提交完整的代码实现和设计报告。
二、数据结构课程设计题目
1. 二叉树的遍历(限1 人完成)
任务:编程实现二叉树遍历的功能:
就是遵从某种次序,访问二叉树中的所有结点,使得每个结点仅被访问一次。一般先左后右。
★前序遍历DLR 首先访问根结点,然后遍历左子树,最后遍历右子树。
★中序遍历LDR 首先遍历左子树,然后根结点,最后右子树
★后序遍历LRD 首先遍历左子树,然后遍历右子树,最后访问根结点。
要求:根据以上功能说明,设计程序完成功能;
2.二叉排序树的实现(限1 人完成)
任务:用顺序和二叉链表作存储结构
★以回车('\n')为输入结束标志,输入数列L,生成一棵二叉排序树T;
★对二叉排序树T作中序遍历,输出结果;
★输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则输出信息“无x”;
要求:根据以上功能说明,设计程序完成功能;
3. 最小生成树问题(限1 人完成)
设计要求:在n个城市之间建设网络,只需保证连通即可,求最经济的架设方法。存储结构采用多种。求解算法多种。
要求:根据以上功能说明,设计程序完成功能。
4.顺序查找与二分查找(限1 人完成)
数据结构实践与实训
《数据结构》实践与实训
指导书
主编:马 雯
消防专业实验中心
科目一顺序表基本操作
一、实验目的
1.学会用C语言定义线性表的顺序存储结构,实现对顺序表的一些基本操作和具体的函数定义。
2.掌握顺序表的基本操作,实现顺序表的建立、插入、删除以及归并。
3.进一步掌握C语言的结构特点,熟悉C程序的输入、编辑、调试和运行全过程。
二、实验内容
1.顺序表的建立、插入及删除。
2.两个顺序表的归并。
三、实验准备
1.熟悉顺序表的建立、插入、删除操作的基本算法。
2.熟悉两个顺序表的归并的基本算法。
四、实验步骤
1.顺序表的建立、插入、删除
(1)定义顺序表:
#define MAXSIZE 1024
typedef int ElemType; //线性表中存放整型元素
typedef struct
{ ElemType elem[MAXSIZE];
int len; //顺序表的长度
}Sqlist;
将此结构定义放在一个头文件sqlist.h里,可避免在程序中代码重复书写。
(2)初始化顺序表。
(3)从键盘上依次输入21、18、30、75、42、56,创建顺序表,并输出顺序表中的各元素值。
(4)分别在顺序表的第3个位置和第9个位置插入67和10,给出插入成功或失败的信息,并输出顺序表中的各元素值。
(5)删除顺序表中的第6个数据元素和第8个数据元素,给出删除成功或失败的信息,并输出顺序表中的各元素值。
2.两个顺序表的归并
(1)构造两个顺序线性表La和Lb,其元素都按值非递减顺序排列。
(2)实现归并La和Lb得到新的顺序表Lc,Lc的元素也按值非递减顺序排列。
二叉排序树的应用
}
else
{
b = b->right;
}
}
}
return;
}
3.2.3前序遍历模块
void preorder(btree *b)
{
btree *stack[100];
btree *p = NULL;
int top = 0;
p = b;
if(b != NULL)
{
top = 1;
stack[top] = p;
2概要设计
2.1所需模块
根据程序功能,确定所需模块如下:
(1)主函数菜单模块
(2)插入模块
(3)前序遍历模块
(4)中序遍历模块
(5)后序遍历模块
(6)删除模块
2.2功能模块关系图
3算法描述
3.1模块流程图
3.2各模块代码
3.2.1主函数菜单模块
该模块功能主要是给用户提供清晰的可操作界面,易于人机操作。并能很好的调用其他各模块,使程序更加优化,思路更加清晰,结构更加明了,提高了程序的实用性。其算法如下:
{
btree *stack[100];
btree *p = NULL;
btree *q = NULL;
int sign = 0;
int top = -1;
p = b;
exit(1);
二叉排序树与平衡二叉排序树基本操作的实现 文本文档
攀枝花学院本科学生课程设计任务书题 目 二叉排序树与平衡二叉树的实现1、课程设计的目的使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。3) 使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)(1) (1)以回车('\n')为输入结束标志,输入数列L,生成一棵二叉排序树T;(2)对二叉排序树T作中序遍历,输出结果;(3)计算二叉排序树T查找成功的平均查找长度,输出结果;(4)输入元素x,查找二叉排序树T,若存在含x的结点,则删该结点,并作中序遍历(执行操作2);否则输出信息“无x”;(5)用数列L,生成平衡的二叉排序树BT:当插入新元素之后,发现当前的二叉排序树BT不是平衡的二叉排序树,则立即将它转换成新的平衡的二叉排序树BT; (6)计算平衡的二叉排序树BT的平均查找长度,输出结果。3、主要参考文献[1]刘大有等,《数据结构》(C语言版),高等教育出版社[2]严蔚敏等,《数据结构》(C语言版),清华大学出版社[3]William Ford,William Topp,《Data Structure with C++》清华大学出版社[4]苏仕华等,数据结构课程设计,机械工业出版社4、课程设计工作进度计划第1天 完成方案设计与程序框图 第2、3天 编写程序代码第4天 程序调试分析和结果第5天 课程设计报告和总结指导教师(签字) 日期 年 月 日教研室意见:年 月 日学生(签字): 接受任务时间: 年 月 日注:任务书由指导教师填写。课程设计(论文)指导教师成绩评定表题目名称 二叉排序树与平衡二叉树的实现评分项目 分值 得分 评价内涵工作表现20% 01 学习态度 6 遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。02 科学实践、调研 7 通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。03 课题工作量 7 按期圆满完成规定的任务,工作量饱满。能力水平35% 04 综合运用知识的能力 10 能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。05 应用文献的能力 5 能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。06 设计(实验)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、设计题目
1、题目:二叉排序树的实现 (用顺序和二叉链表作存储结构 )
2、要求(功能):
1) 以回车('\n')为输入结束标志,输入数列L,生成一棵二叉排序树T;
2) 对二叉排序树T作中序遍历,输出结果;
3) 输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则输出信息“无x”;
二、需求分析
建立排序二叉树,主要是建立节点来存储输入的数据,需要建立函数来创造排序二叉树。
该题目包括三方面的容:一个是二叉排序树的建立,而是二叉树的中序遍历,三是二叉树元素的查找并删除。
三、数据结构设计
在写算法之前,应对数据结构进行设计。本体主要会用到指针变量,插入节点函数和建立二叉树,以及中序遍历函数,还有一些输入输出语句。
四、算法设计
算法设计思想
二插链表作存储结构:建立二插排序树采用边查找边插入的方式。查找函数采用递归的方式进行查找。如果查找成功则不应再插入原树,否则返回当前结点的上一个结点。然后利用插入函数将该元素插入原树。
对二叉树进行中序遍历采用递归函数的方式。在根结点不为空的情况下,先访问左子树,再访问根结点,最后访问右子树。
删除结点函数,采用边查找边删除的方式。如果没有查找到,则不对树做任何的修改;如果查找到结点,则分四种情况分别进行讨论:1、该结点左右子树均为空;2、该结点仅左子树为空;3、该结点仅右子树为空;4、该结点左右子树均不为空。
在进行算法设计时,应将题目分为五个函数模块:
1、中序遍历,符合升序输出
void inorder(node *&root)
{
if(root!=NULL)
{
inorder(root->left);
cout<
inorder(root->right);
}
}
2、在查找树中插入元素
void insert(node *&ptr,int item) {
if(ptr==NULL)
ptr=new node(item);
else if(item
insert(ptr->left,item);
else insert(ptr->right,item);
}
3、在查找树中查找元素
node *find(node *&ptr,int item) {
if(ptr==NULL)
return NULL;
if(ptr->data==item)
return ptr;
else if(item
find(ptr->left,item);
else find(ptr->right,item); }
4、在查找树中查找肯定存在的元素,并返回其引用node *&findy(node *&ptr,int item)
{
if(ptr->data==item)
return ptr;
else if(item
findy(ptr->left,item);
else findy(ptr->right,item);
}
node* rl()
{
return left;
}
node* rr()
{
return right;
}
5、删除指定值为所在结点
void dele(node *&ptr)
if(ptr->rl()==NULL&&ptr->rr()==NULL)
ptr=NULL;
else if(ptr->rr()==NULL)
ptr=ptr->rl();
else
ptr=ptr->rr();
}
private:
int data;
node *left;
node *right;
};
五、程序实现
1、调入文件
#include
2、主函数
int main()
{
int t,i=0,j;
cout<<" 10计科一班旭(1010311114)"< cout<<"1.二叉排序树T的输入:"< cout<<"输入数字个数(结点个数):"; cin>>t; cout<<"输入"< node *x=new node(j); for(;i { cin>>j; x->insert(x,j); } cout<<"中序遍历为:"; x->inorder(x); //作中序遍历 cout<<"\n"; cout<<"2.二叉排序树T的元素查找和删除:"< while(j!=-1) { node *t=x->find(x,j); //定位结点 if(t!=NULL) { node *&y=x->findy(x,j); x->dele(y); cout<<"中序遍历为:"; x->inorder(x); } else cout<<"无"< cout<<"\n输入操作(当输入-1时程序结束):"< cin>>j; } return 0; } 六、程序编码 #include using namespace std; class node { public: