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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(数据结构课程设计二叉树的遍历算法分析与设计.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计二叉树的遍历算法分析与设计.docx

1、数据结构课程设计二叉树的遍历算法分析与设计数据结构课程设计-二叉树的遍历算法分析与设计 数据结构课程设计题 目 二叉树的遍历算法分析与设计 学生姓名 专业班级 计算机12-1 指导教师 职 称 副教授 所在单位 信息科学系 教学部主任 完成日期 2014年1月10日课程设计报告单学号姓名李科锦专业班级计算机12-1考 核 项 目评分备注1平时工作态度及遵守纪律情况(10分)2掌握基本理论、关键知识、基本技能的程度和阅读参考资料的水平(10分)3独立工作能力、综合运用所学知识分析和解决问题能力及实际工作能力提高的程度(20分)4完成课程设计说明书及软件的情况与水平(小组分工情况、规范性、整洁清楚

2、、叙述完整性、思路清晰程度、工作量及实际运行情况和创新性)(60分)总评成绩综 合 评 定:(优、良、中、及格、不及格) 指导教师签字:2014年1月10日数据结构课程设计任务书一、任务及要求:1.设计(研究)任务和要求研究内容:二叉树的遍历算法分析与设计任务和要求:(1)学习数据结构基础知识,掌握数据结构典型的算法的使用。(2)对指导教师下达的题目进行系统分析。(3)根据分析结果完成系统设计。(4)编程:在计算机上实现题目的代码实现。(5)完成对该系统的测试和调试。(6)提交课程设计报告。要求完成课程设计报告3000字以上(约二十页)。完成若干综合性程序设计题目,综合设计题目的语句行数的和在

3、100行语句以上。2.原始依据结合数据结构课程中的基本理论和基本算法,正确分析出数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。3.参考题目:二、工作量2周(10个工作日)时间三、计划安排第1个工作日:查找相关资料、书籍,阅读示例文档,选择题目。第2个工作日第3个工作日:设计程序结构、模块图。第4个工作日第9个工作日:完成程序的编码,并且自己调试、测试。穿插进行课程设计报告的撰写。第10个工作日:上交课程设计报告,由教师检查软件测试效果、检查

4、课程设计报告,给出学生成绩。指导教师签字: 2013年 12月 30日题目一:居民信息管理系统(以二叉树建立)算法分析与设计1.需求分析此系统是根据用户的需求,主要是对居民的基本信息进行登记,统计,并对居民信息进行管理。系统除了以上功能外还要有基本的管理工作,例如添加居民信息,修改居民信息,删除居民信息等最基本的操作,还有就是通过本系统还可以统计出在在各个教育程度的人数,方便应用者更加的快捷的做出统计,提高工作效率。2.概要设计本系统中定义jumininfo结构体类型用于描述居民信息。jumininfo结构体类型定义格式如下:typedef struct char num18; char na

5、me21; char sex5; char age4; char xueli11; char addr51; char tel21;jumininfo;其中num用于描述居民的身份证号信息,name用于描述居民的姓名信息,sex用于描述居民的性别信息,age用于描述居民的年龄信息,xueli用于描述居民的教育程度信息,addr用于描述居民的地址信息,tel用于描述居民的联系方式信息。本系统中定义nodetype结构体类型用于建立二叉树的节点。nodetype结构体类型定义格式如下:typedef struct node jumininfo jumin; struct node *L; stru

6、ct node *R;nodetype;其中jumin用于存储居民个人信息,*L为指向左孩子的指针,*R为指向右孩子的指针。3.详细设计依据需求分析结果,居民信息管理系统系统可以分为四个模块:居民信息查询模块、居民信息删除模块、居民信息添加模块和居民信息修改模块。如下图所示:图2-1 居民信息管理系统模块结构1. 居民信息查询模块居民信息查询模块主要实现的功能是居民信息的快速查询。依据用户输入的身份证号查找对应的居民信息。2. 居民信息删除模块居民信息删除模块主要实现的功能是对特定居民信息的删除。3. 居民信息添加模块居民信息添加模块主要是闲的功能是对固定数量的居民信息的添加。4. 居民信息修

7、改模块居民信息修改模块主要实现的功能是对特定居民信息的修改。5.系统总体流程4.调试分析1. 程序设计及过程一、设想将上一次单链表的课程设计所编写的成程序改写,定义成为二叉树结构类型。结果:失败,单链表指针指向与二叉树完全不同,使整个程序指针结构改变工作量变得很大,短时间内一人无法完成。二、参考书本,重新定义类型结构,取单链表课程设计部分显示函数进行重新编辑。结果:比较成功,建立了一个以二叉树结构为基础的管理系统。缺点:将文件存入文件和从文件读取没有实现,二叉树的写入与单链表区别较大,已经找出将树存入文件的方法,但读取程序未能编写成功,因此在本次课程设计中未加入写入文件模块。目前程序中未能实现

8、的功能除了从文件读取功能外,还有查找功能。查找功能的程序代码已经编写完成,但是实际测试中未能达到与其功能,具体问题仍然在分析和Debug中,本次课程设计不便列举。由于查找功能的缺失,使二叉树节点信息的删除和修改功能也未实现。但本次课程设计的主要目的是成功的建立二叉树并将其遍历,鉴于此功能已经实现,可以基本确定此次课程设计的基本目的已经达到。5.测试结果及运行效果进入主菜单,按数字键选择所需功能:图5-1显示主菜单选择录入居民信息:当输入身份证号不是18位时:录入成功时:图5-3录入成功输入“#”结束录入,返回主菜单。选择显示居民信息:系统自动中序遍历已建成的二叉树。图5-4中序遍历已建成的二叉

9、树选择插入居民信息:优点:系统自动选择二叉树上合适的位置插入信息缺点:每次只能插入一个居民信息题目二:居民信息管理系统(单链表建立含各种排序)算法分析与设计1.需求分析与题目一相同2.概要设计本系统中定义jumin结构体类型用于描述居民信息。jumin结构体类型定义格式如下:struct jumin int num; char name20; char sex; int age; char xueli30; int wage; char addr30; char tel20;jumin100其中num用于描述居民的户籍号信息,name用于描述居民的姓名信息,sex用于描述居民的性别信息,age

10、用于描述居民的年龄信息,xueli用于描述居民的教育程度信息,wage用于描述居民的收入信息,addr用于描述居民的地址信息,tel用于描述居民的联系方式信息。本系统中定义rectype结构体类型用于建立链表,定义格式如下:typedef struct int key; jumininfo info;rectype;3.详细设计3.1主函数模块主函数模块主要提供本程序运行的基础以及供用户选择子函数功能。3.1.1. 主函数模块描述由homepage函数显示功能菜单,由用户选择需要的功能并连接到对应的功能函数。3.1.2. 主函数模块设计实现进入程序运行结果如下截图:图3.1-1 主函数运行结果

11、若用户输入1-7以外的字符,则如下图:3.2录入居民信息子模块录入居民信息子模块主要提供用户录入居民信息至系统指定文件并存储的功能。3.2.1. 录入居民信息子模块描述经由main函数进入录入函数,用户根据系统提示按步骤输入居民信息。3.2.2. 录入居民信息子模块流程框图 图3.2-3 录入信息模块流程框图3.2.3. 录入居民信息子模块设计实现进入程序运行结果如下截图:3.3修改居民信息子模块修改居民信息子模块主要提供用户修改已录入的居民信息并存储改变的功能。3.3.1. 修改居民信息子模块描述经由main函数进入修改函数,用户根据系统提示按步骤选择需要修改的项目并修改。3.3.2. 修改

12、居民信息子模块流程框图 图3.3-5 修改信息模块流程框图3.3.3. 修改居民信息子模块设计实现当进入系统模块时未读取到数据库时5秒后系统自动返回主菜单。进入系统成功读取数据库:3.4 写入/读取信息子模块写入/读取信息子模块主要提供用户在录入和编辑信息后将信息存入文件以便下次运行程序继续读取信息的功能。此模块通常在后台运行,只在读取或写入文件发生错误时显示文件打开错误!请先录入信息列表。系统将自动返回主菜单,请稍候. ,并在5秒后自动返回主菜单。在进入各模块时读取错误如下:图3.4-11 进入浏览模块式读取文件错误图3.4-14 进入浏览模块式读取文件错误3.5 按年龄直接插入排序子模块按

13、年龄直接插入排序子模块主要提供用户在存储信息后将信息按年龄由小到大顺序排序的功能。目前还存在在每次排序完成后会在数据列表最前端插入一组空数据的BUG,且到目前为止并未修复。图3.4-15 按年龄直接插入排序子模块3.6 按户籍号直接选择排序子模块按户籍号直接选择排序子模块主要提供用户在存储信息后将信息按户籍号由小到大顺序排序的功能。目前还存在在每次排序完成后会在数据列表最前端插入一组空数据的BUG,且到目前为止并未修复。图3.4-15 按户籍号直接选择排序子模块总 结课程设计终于成功的收尾了,虽然有些疲惫但是颇有收获,我巩固了所学到的知识,并动手实践,更好地理解和运用了数据结构的知识。数据结构

14、学了近一学期,很多知识掌握得不是很牢,通过平时的复习自己也理解了一些,但让我有更深的理解和更好的认识则是在这个课程设计。通过本次课程设计,复习了上学期的C语言编程知识,学会了怎么去借鉴别人方法 和经验,知道了如何整理材料是设计最快的完成这为以后设计毕业论文打下了基础。此次课程设计鉴于上次的经验我选择了独立一人一组。觉得虽然程序编写有些吃力,但是一个人完成程序时的成就感也加倍了。由于临近期末,复习任务紧张,这次的课程设计完成的还不是很周密,还有很多可以完善的地方,但总的来说已经达到我之前预想的程序效果。在这次课程设计中,我还帮助了其他小组课程设计的完成,见到了很多的程序错误,并帮他们改正,这也锻

15、炼了我个人在程序debug方面的能力。还着愉快的心情,数据结构课程设计结束了。希望在这次课程设计中所总结的经验和教训会让我以后的课程设计更加顺利。参考文献1 严蔚敏.吴伟民著.数据结构(C语言版). 北京:清华大学出版.1999年第一版2 陈一华等编. 数据结构(C 语言). 北京:电子科技大学出版社.1998年第一版3 谭浩强. C语言程序设计(第二版).北京:高等教育出版社.2002附录.主要代码题目一#include #include #include #include #include typedef struct char num18; char name21; char sex5;

16、 char age4; char xueli11; char addr51; char tel21;jumininfo;typedef struct node jumininfo jumin; struct node *L; struct node *R;nodetype;typedef nodetype *btree;/*void write(btree k,char * num) FILE *fp; if(fp=fopen(infolist.txt,a+)=NULL) printf (文件打开错误!请先录入信息列表。n); Sleep(3000); return; if(k) fwrite

17、(&k-jumin.num,sizeof(nodetype),1,fp); if(k-L) write(k-L,k-L-jumin.num); if(k-R) write(k-R,k-R-jumin.num); fclose(fp);*/btree bssearch(btree p,char *num) while(p!=NULL) if(strcmp(num,p-jumin.num)=0) return p; if(strcmp(num,p-jumin.num)L; else p=p-R; return p;void insert(btree * root,char * num) /FILE

18、 *fp; btree f,p; char name20,sex4,age3,xueli10,addr50,tel20; /fp=fopen(infolist.txt,a); f=NULL; p=*root; while(p) if(strcmp(num,p-jumin.num)=0) printf(该身份证号居民信息已存在,请重新输入!n); return; f=p; p=(strcmp(num,p-jumin.num)L:p-R; p=(btree)malloc(sizeof(nodetype); strcpy(p-jumin.num,num); printf(请输入姓名(少于10个汉字)

19、:n); scanf(%s,name); strcpy(p-jumin.name,name); printf(请输入性别(男或女):n); scanf(%s,sex); strcpy(p-jumin.sex,sex); printf(请输入年龄(少于3个数字):n); scanf(%s,age); strcpy(p-jumin.age,age); printf(请输入学历(少于5个汉字):n); scanf(%s,xueli); strcpy(p-jumin.xueli,xueli); printf(请输入家庭住址(少于25个汉字):n); scanf(%s,addr); strcpy(p-j

20、umin.addr,addr); printf(请输入电话号码(少于20个数字或字符):n); scanf(%s,tel); strcpy(p-jumin.tel,tel); p-L=NULL; p-R=NULL; if(*root=NULL) *root=p; else if(strcmp(num,f-jumin.num)L=p; else f-R=p; /write(p,p-jumin.num); /*while(p-L) if (fwrite(&p-jumin.num,sizeof(nodetype),1,fp)!=1) printf(File write error!n); if(p-

21、L) p=p-L; else if(p-R) p=p-R; */ /fclose(fp);/*void read(btree k,char *num) FILE *fp; if(fp=fopen(infolist.txt,a+)=NULL) printf (文件打开错误!请先录入信息列表。n); Sleep(3000); return; if(fread(&k-jumin.num,sizeof(nodetype),1,fp)!=1) exit(0); insert(&k,k-jumin.num); if(k-L) read(k-L,k-L-jumin.num); if(k-R) read(k-

22、R,k-R-jumin.num); fclose(fp);*/void inorder(btree t)/中序遍历 /read(t,t-jumin.num); if(t) inorder(t-L); printf( 户籍号t 姓名tt 性别tt年龄 n); printf(n %stt %stt %stn,t-jumin.num,t-jumin.sex,t-jumin.age); printf(n 学历tt 住址tt电话 n); printf(n %stt %stt%sn,t-jumin.xueli,t-jumin.addr,t-jumin.tel); inorder(t-R); btree c

23、reatebtree(void) btree root; char num19; root=NULL; printf(n请输入18位身份证号,输入#取消录入n); scanf(%s,num); while(strcmp(num,#)!=0) while(strlen(num)!=18) printf(错误!输入的身份证号不是18位,请重新输入:n); scanf(%s,num); insert(&root,num); printf(n请输入18位身份证号,输入#取消录入n); scanf(%s,num); return root;btree Delete(btree bt,char *num)

24、 btree p,q; if(strcmp(bt-jumin.num,num)=0) if(bt-L=NULL&bt-R=NULL) free(bt); return NULL; else if(bt-L=NULL) p=bt-R; free(bt); return p; else if(bt-R=NULL) p=bt-L; free(bt); return p; else p=q=bt-R; while(q-L!=NULL) q=q-L; q-L=bt-L; free(bt); return p; else if(strcmp(bt-jumin.num,num)0&bt-L!=NULL) b

25、t-L=Delete(bt-L,num); if(strcmp(bt-jumin.num,num)R!=NULL) bt-R=Delete(bt-R,num); return bt; void quit()(略)void homepage() /*菜单函数*/(略)void main()(略)题目二此处只给出排序函数,其他部分同C语言课程设计void insertsort(rectype r)/按年龄直接插入排序 int i,j; int m=load(); printf(n 原来的居民信息:n); display(); printf(nnnn); for(i=1;im;i+) ri.key=

26、ri.info.age; for(i=2;i=m;i+) rm+1=ri; j=i-1; while(rm+1.keyrj.key) rj+1=rj-; rj+1=rm+1; save(m+1); printf(n 排序后的居民信息:n); display();void selectsort(rectype r)/按户籍号直接选择排序rectype x; int m=load(); int i,j,k; printf(n 原来的居民信息:n); display(); for(i=0;im;i+) ri.key=ri.info.num; ; for(i=0;im;i+) k=i; for(j=i+1;j=m;j+) if(rj.keyrk.key) k=j; if(k!=i) x=ri; ri=rk; rk=x; save(m+1); printf(n 排序后的居民信息:n); display();

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

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