ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:76.14KB ,
资源ID:3849639      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3849639.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(某某工业大学应数刘智煌数据结构.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

某某工业大学应数刘智煌数据结构.docx

1、某某工业大学应数刘智煌数据结构某某课程设计课程名称数据结构课程设计题目名称二叉排序树的实现学生学院应用数学学院专业班级学 号学生姓名指导教师刘大哥2016年平台VC+6.0问题二叉排序树的实现二叉排序补充概念(也可以参考书上第九章第二节) 左子树的数据总是大于根和右子树的数据,这种就叫做二叉排序树,简单一点,二叉树左边的数据大于右边. 1)编程实现二叉排序树,包括生成、插入,删除;2)对二叉排序树进行先根、中根、和后根非递归遍历;3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3

2、项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么? 5)格式就要按照我们作业的要求,对数据测试,分析,总结和改进的工作要做的详细一点代码实现#include#include#include#include#include#include#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -1typedef int Status;typedef int StudentITREE1ype;#define N 100 #define SIZE 100 #define INC 100#defin

3、e EQ(a,b) (a)=(b)#define LT(a,b) (a)(b)#define LQ(a,b) (a)=S.size)/有空间可以储存 S.base=(BiTree *)realloc(S.base,(S.size+INC) * sizeof(BiTree);/有空间就把输入的数推进栈里,没有就退出程序。 if(!S.base) exit(OVERFLOW); S.top=S.base+S.size; S.size+=INC; *S.top+=e; return 1;Status Pop(SqStack &S,BiTree &e)/把数推出指针 if(S.top=S.base)

4、return 0;/ e=*-S.top;/把不需要的数推出 return 1;int StackEmpty(SqStack S)/测试是不是空栈 if(S.base=S.top) return 1; else return 0;/队列typedef BiTree QElemType;/构造一个树typedef struct QNode QElemType data; QNode *next;/*next指针*QueuePtr;struct LinkQueue/构造一个队列 QueuePtr front,rear;Status InitQueue(LinkQueue &Q)/队列类型 if(!

5、(Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode) exit(OVERFLOW);/如果首队列尾队列队列,申请空间储存结点,结束程序 Q.front-next=NULL; return 1;Status EnQueue(LinkQueue &Q,QElemType e) QueuePtr p; if(!(p=(QueuePtr)malloc(sizeof(QNode) exit(OVERFLOW); p-data=e; p-next=NULL; Q.rear-next=p; Q.rear=p; return 1;Status DeQueue(LinkQ

6、ueue &Q,QElemType &e) QueuePtr p; if(Q.front=Q.rear) return 0; p=Q.front-next; e=p-data; Q.front-next=p-next; if(Q.rear=p) Q.rear=Q.front; free(p); return 1;/二叉排序树Status InitDSTable(BiTree &TREE1)/构造一棵树叫TREE1 TREE1=NULL; return 1;BiTree SearchBST(BiTree T,StudentITREE1ype key)/查找树里面的学号 if(!T|EQ(key,

7、T-data.key)/比较输入的学号和树里面的学号 return T; else if LT(key,T-data.key) return SearchBST(T-lchild,key);/如果相同返回树 else return SearchBST(T-rchild,key); Status SearchBST(BiTree &T,StudentITREE1ype key,BiTree f,BiTree &p) if(!T) p=f; return 0; /如果非空,把f的值赋给p else if EQ(key,T-data.key) p=T; return 1; else if LT(ke

8、y,T-data.key) return SearchBST(T-lchild,key,T,p); else return SearchBST(T-rchild,key,T,p); /不同就重复查找直到相同 Status InsertBST(BiTree &T, ElemType e)/插入结点信息 BiTree p,s; if(!SearchBST(T,e.key,NULL,p) s=(BiTree)malloc(sizeof(BiTNode); s-data=e;/插入结点 s-lchild=s-rchild=NULL;/左右孩子指针等于空值 if(!p) T=s; /若果非空树,s的值赋

9、给T。 else if LT(e.key,p-data.key) p-lchild=s; else p-rchild=s; return 1; /如果e.key大于data.key,则插入左孩子指针,否则插入右孩子指针 else return 0; /删除树 void Delete(BiTree &p) BiTree q,s; if(!p-rchild) q=p; p=p-lchild; free(q); /如果,右孩子没有p,则在左孩子找p else if(!p-lchild) q=p; p=p-rchild; free(q); /如果左孩子没有p,则在右孩子中找。 else q=p; s=

10、p-lchild;/把左孩子中p赋给s。 while(s-rchild) q=s; s=s-rchild; /循环直到右孩子不存在s。 p-data=s-data; /把找到最后一个右孩子的值赋给p/整段把树左边移到右边。 if(q!=p) /如果q不等于p q-rchild=s-lchild; /右孩子树移到左边 else q-lchild=s-lchild; /否则s的值赋给q free(s); Status DeleteBST(BiTree &T,StudentITREE1ype key)/删除树 if(!T) return 0; else if EQ(key,T-data.key) D

11、elete(T); else if LT(key,T-data.key) DeleteBST(T-lchild,key); else DeleteBST(T-rchild,key); return 1; /循环找和删除。int BiTreeDepth(BiTree T)/树的深度 int i,j; if(!T) return 0; if(T-lchild) i=BiTreeDepth(T-lchild); else i=0; if(T-rchild) j=BiTreeDepth(T-rchild); else j=0; return ij?i+1:j+1;/若左孩子存在,循环寻找直到左孩子不存

12、在,找到树的深度,返回树的深度。void Visit(ElemType e)/查看结点中学号 printf(%d-,e.key);/中序遍历Status InOrderTraverse(BiTree T) BiTree p; SqStack S; InitStack(S);Push(S,T); while(!StackEmpty(S) while(GetTop(S,p)&p) Push(S,p-lchild); Pop(S,p); if(!StackEmpty(S) Pop(S,p); Visit(p-data); Push(S,p-rchild); printf(n); return 1;/

13、前序遍历Status PreOrderTraverse(BiTree T) BiTree p; SqStack S; InitStack(S);Push(S,T); while(!StackEmpty(S) while(GetTop(S,p)&p) Push(S,p-lchild); Visit(p-data); Pop(S,p); if(!StackEmpty(S) Pop(S,p); Push(S,p-rchild); printf(n); return 1;/后序遍历Status PostOrderTraverse(BiTree T) SqStack S;SqStack R; BiTre

14、e p;BiTree r;InitStack(S);InitStack(R); Push(S,T); while(!StackEmpty(S) while(GetTop(S,p)&p) Push(S,p-lchild); Pop(S,p); if(!StackEmpty(S) if(!StackEmpty(R) GetTop(R,r); if(GetTop(S,p)&p-rchild&p!=r) Push(S,p-rchild);Push(R,p); else Pop(S,p);Visit(p-data); if(r=p) Pop(R,r); p=NULL;Push(S,p); printf(

15、n); return 1;void ShowTree(BiTree T) /层次遍历法显示树 LinkQueue q; BiTree s; int d,t,i,n,num; d=t=i=n=0; num=1; d=BiTreeDepth(T); if(T) InitQueue(q); EnQueue(q,T); while(num=(pow(2,d)-1) if(num=pow(2,i) printf(n); i+; t=0; n=(int)pow(2,d-i+t); for(int x=1;xdata.key);num+; if(s&s-lchild) EnQueue(q,s-lchild)

16、; else EnQueue(q,NULL); if(s&s-rchild) EnQueue(q,s-rchild); else EnQueue(q,NULL); printf(n);int ShowTree2(BiTree T,int n)/递归法显示树 int i; if(T=NULL) return 1; ShowTree2(T-rchild,n+1); for(i=0;idata.key); ShowTree2(T-lchild,n+1);int main() BiTree TREE1,p=NULL; StudentITREE1ype key;char name10;int score

17、;ElemType e; printf( 1: Build the Binary Sort Tree 2:Insert the Nodes 3: Delete Nodes 4: preOrderTraverse ,InOrderTraverse, postOrderTraverse 5: build 50Nodes and test the efficiency n); while(true) char choise;scanf(%c,&choise); if (choise=q) break; switch(choise) case 1 : InitDSTable(TREE1); print

18、f(nnnPlease insert the number of the Nodes you want :(x) ); int N1;scanf(%d,&N1); printf(please insert :nnKeyStudents name score n) for(int i=0;idata.key,p-data.name,p-data.score); DeleteBST(TREE1,N2); ShowTree(TREE1); break; case 3 : printf(PreOrderTraverse:n); PreOrderTraverse(TREE1); printf(InOrd

19、erTraverse:n); InOrderTraverse(TREE1); printf(:PostOrderTraversen); PostOrderTraverse(TREE1); break; case e : InitDSTable(TREE1); struct ElemType rN=43,name,43,25,name,35,48,name,48,1,name6,82, 24,name,32,9,name,85,38,name,36,28,name,36,27,name,37, 23,name,33,12,name,12,40,name,38,13,name,13,45,name

20、,14, 29,name,39,35,name,35,21,name,31,30,name,38,20,name,20, 11,name,11,31,name,31,19,name,19,32,name,32,18,name,18, 47,name,14,8,name4,80,5,name8,84,4,name2,78,17,name,17, 49,name,14,34,name,32,16,name,16,15,name,15,3,name7,83, 41,name,14,36,name,34,14,name,14,2,name1,4,26,name,34, 7,name9,85,39,na

21、me,39,46,name,46,10,name5,81,22,name,30, 42,name,44,33,name,33,44,name,44,6,name3,79,37,name,37, 50,name,50; for(int i=0;iN-1;i+) InsertBST(TREE1,ri); int n = 10000000;/总共查找次数 double start = clock(); /查找二叉排序树开始时间 for(int i=0;idata.key,p-data.name,p-data.score); double finish = clock();/查找二叉排序树结束时间 double time = finish-start; printf(在二叉排序树里随机查找任意一个关键字%d次所需时间为:%lf,n,time); start = clock();/查找数组开始时间 for(int i=0;in;i+) srand(i);/随循环设置随机种子 int randnumber = rand()%50;/每一次给定一个0到50的随机数

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1