《2022年2022年课程设计 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年课程设计 .pdf(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第-1-页课程设计(论文)任务书软件学院软件+道路与铁道专业2班一、课程设计(论文)题目二叉排序树的实现二、课程设计(论文)工作自 2012年 12月 17 日起至 2012 年 12月 23 日止。三、课程设计(论文)地点:15#520四、课程设计(论文)内容要求:1本课程设计的目的(1)(1)要求学生达到熟练掌握C 语言的基本知识和技能;(2)基本掌握面向对象程序设计的基本思路和方法;(3)能够利用所学的基本知识和技能,解决简单的程序设计问题。2课程设计的任务及要求1)基本要求:(1)(1)要求利用TC 的编程思想来完成系统的设计;(2)要求在设计的过程中,建立清晰的结构体层次;(3)在系
2、统的设计中,至少要做到基本管理要求。(4)学生必须仔细阅读数据结构课程设计方案,认真主动完成课设的要求。有问题及时主动通过各种方式与教师联系沟通。2)创新要求:在基本要求达到后,可进行创新设计,如改善算法性能、友好的人机界面等。3)课程设计论文编写要求(1)要按照书稿的规格打印与写课程设计论文(2)论文包括目录、功能描述、设计思路、具体实现、运行调试与分析讨论、设计体会与小结、参考文献、附录(源代码)等(3)课程设计论文装订按学校的统一要求完成4)答辩与评分标准:(1)考勤与学习态度:20 分;(2)设计思路:20 分;(3)代码实现:20 分;名师资料总结-精品资料欢迎下载-名师精心整理-第
3、 1 页,共 25 页 -第-2-页(4)调试与分析:20 分;(5)回答问题:10 分;(6)论文规范性:10 分。5)参考文献1 严蔚敏,吴伟民,数据结构北京清华大学出版社2 谭浩强,C+程序设计北京清华大学出版社3 谭锋,章伟聪,Visual c+程序设计实训教程北京科学出版社6)课程设计进度安排1准备阶段(2 学时):选择设计题目、了解设计目的要求、查阅相关资料2程序模块设计分析阶段(2 学时):程序总体设计、详细设计3代码编写调试阶段(6 学时):程序模块代码编写、调试、测试4撰写课程设计论文阶段(2 学时):总结课程设计任务和设计内容,撰写课程设计论文学生签名:谢岳松2012 年
4、12 月 24 日课程设计(论文)评审意见(1)考勤与态度(20 分):优()、良()、中()、一般()、差();(2)设计思路(20 分):优()、良()、中()、一般()、差();(3)代码实现(20 分):优()、良()、中()、一般()、差();(4)调试与分析(20 分):优()、良()、中()、一般()、差();(5)回答问题(10 分):优()、良()、中()、一般()、差();(6)论文规范性(10 分):优()、良()、中()、一般()、差();评阅人:职称:讲师2012 年 12 月 26 日名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 25 页 -第-3-
5、页目录绪论 .-1-一、功能描述.-2-二、设计思路.-2-三、具体实现.-6-四、运行调试及结果分析.-14-五、设计体会与小结.-16-六、参考文献.17 七、附录(核心代码).17 名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 25 页 -第-1-页绪论数据结构是一门理论性强、思维抽象、难度较大的课程,是基础课和专业课之间的桥梁。该课程的先行课程是计算机基础、程序设计语言、离散数学等,后续课程有操作系统、编译原理、数据库原理、软件工程等。通过本门课程的学习,我们应该能透彻地理解各种数据对象的特点,学会数据的组织方法和实现方法,并进一步培养良好的程序设计能力和解决实际问题的
6、能力。数据结构是计算机科学与技术专业的一门核心专业基础课程,在该专业的课程体系中起着承上启下的作用,学好数据结构对于提高理论认知水平和实践能力有着极为重要的作用。学习数据结构的最终目的是为了获得求解问题的能力。对于现实世界中的问题,应该能从中抽象出一个适当的数学模型,该数学模型在计算机内部用相应的数据结构来表示,然后设计一个解此数学模型的算法,再进行编程调试,最后获得问题的解答。实习课程是为了加强编程能力的培养,鼓励学生使用新兴的编程语言。相信通过数据结构课程实践,无论是理论知识,还是实践动手能力,我们都会有不同程度上的提名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 25 页
7、-第-2-页高。一、功能描述1)以回车(n)为输入结束标志,输入数列 L,生成一棵二叉排序树 T;2)对二叉排序树 T 作中序遍历,输出结果;3)输入元素 x,查找二叉排序树 T,若存在含 x 的结点,则删除该结点,并作中序遍历(执行操作 2);否则输出信息“无 x”;二、设计思路算法设计思想二插链表作存储结构:建立二插排序树采用边查找边插入的方式。查找函数采用递归的方式进行查找。如果查找成功则不应再插入原树,否则返回当前结点的上一个结点。然后利用插入函数将该元素插入原树。对二叉树进行中序遍历采用递归函数的方式。在根结点不为空的情况下,先访问左子树,再访问根结点,最后访问右子树。删除结点函数,
8、采用边查找边删除的方式。如果没有查找到,则不对树做任何的修改;如果查找到结点,则分名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 25 页 -第-3-页四种情况分别进行讨论:1、该结点左右子树均为空;2、该结点仅左子树为空;3、该结点仅右子树为空;4、该结点左右子树均不为空。在进行算法设计时,应将题目分为五个函数模块:1、中序遍历,符合升序输出void inorder(node*&root)if(root!=NULL)inorder(root-left);coutdataright);2、在查找树中插入元素void insert(node*&ptr,int item)if(ptr
9、=NULL)名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 25 页 -第-4-页ptr=new node(item);else if(itemdata)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(itemdata)find(ptr-left,item);else find(ptr-right,item);4、在查找树中查找肯定
10、存在的元素,并返回其引用名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 25 页 -第-5-页node*&findy(node*&ptr,int item)if(ptr-data=item)return ptr;else if(itemdata)findy(ptr-left,item);else findy(ptr-right,item);node*rl()return left;node*rr()return right;5、删除指定值为所在结点名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 25 页 -第-6-页void dele(node*&ptr)if(pt
11、r-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()名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 25 页 -第-7-页 int t,i=0,j;cout 谢岳松-218-二叉排序树的实现endl;cout1.二叉排序树 T 的输入:endl;coutt;cout输入tj;node*x=new node(j);
12、for(;ij;x-insert(x,j);coutinorder(x);/作中序遍历coutn;cout2.二叉排序树 T 的元素查找和删除:endl;coutn 输入操作(当输入-1 时程序结束):j;while(j!=-1)node*t=x-find(x,j);/定位结点if(t!=NULL)node*&y=x-findy(x,j);x-dele(y);coutinorder(x);else cout无j;coutn 输入操作(当输入-1 时程序结束):j;return 0;3.程序编码名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 25 页 -第-9-页#include
13、 using namespace std;class node public:node(int i):data(i),lchild(NULL),rchild(NULL)void inorder(node*&root)/中序遍历,符合升序输出 if(root!=NULL)inorder(root-lchild);coutdata rchild);void insert(node*&ptr,int item)/在查找树中插入元素 if(ptr=NULL)ptr=new node(item);名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 25 页 -第-10-页else if(it
14、emdata)insert(ptr-lchild,item);else insert(ptr-rchild,item);node*find(node*&ptr,int item)/在查找树中查找元素,找到返回所在结点指针,找不到返回空指针。if(ptr=NULL)return NULL;if(ptr-data=item)return ptr;else if(itemdata)find(ptr-lchild,item);else find(ptr-rchild,item);node*&findy(node*&ptr,int item)/在查找树中查找肯定存在的元素,并返回其引用 if(ptr-d
15、ata=item)名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 25 页 -第-11-页return ptr;else if(itemdata)findy(ptr-lchild,item);else findy(ptr-rchild,item);node*rl()return lchild;node*rr()return rchild;void dele(node*&ptr)/删除值为 item 所在结点 if(ptr-rl()=NULL&ptr-rr()=NULL)ptr=NULL;else if(ptr-rr()=NULL)ptr=ptr-rl();else ptr=pt
16、r-rr();private:int data;名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 25 页 -第-12-页node*lchild;/左孩子结点node*rchild;/右孩子结点;int main()int t,i=0,j;cout 谢岳松-218-二叉排序树的实现endl;cout1.二叉排序树 T 的输入:endl;coutt;cout输入tj;node*x=new node(j);for(;ij;x-insert(x,j);名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 25 页 -第-13-页coutinorder(x);/作中序遍历cou
17、tn;cout2.二叉排序树 T 的元素查找和删除:endl;coutn 输入操作(当输入-1 时程序结束):j;while(j!=-1)node*t=x-find(x,j);/定位结点if(t!=NULL)node*&y=x-findy(x,j);x-dele(y);coutinorder(x);else cout无j;coutn 输入操作(当输入-1 时程序结束):j;return 0;四、运行调试及结果分析输入节点数输入二叉树数,并输出中序遍历名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页,共 25 页 -第-15-页当输入 25 时,二叉树中无该数据,输出无25 输入-1
18、表示退出名师资料总结-精品资料欢迎下载-名师精心整理-第 18 页,共 25 页 -第-16-页五、设计体会与小结基于我对编程的极大兴趣,我对这次的课程设计非常重视。通过这次实验我也着实又感受了一次编程的乐趣,从中也学到了不少知识。在这段时间里,我遇到过的问题主要就是C 语言和 C+语言有些混淆,一些用法记不太清楚。在石红芹老师的指导帮助下,同学们课余时间的讨论中,这些问题都一一得到了解决。在程序的调试能力上,无形中得到了许多的提高。这样无形中就提高了自己编写的程序的质量。在实际的上机操作过程中,不仅是让我们了解数据结构的理论知识,更重要的是培养解决实际问题的能力,所以相信通过此次实习可以提高
19、我们分析设计能名师资料总结-精品资料欢迎下载-名师精心整理-第 19 页,共 25 页 -第-17-页力和编程能力,为后续课程的学习及实践打下良好的基础六、参考文献1严蔚敏,吴伟民,数据结构北京清华大学出版社2谭浩强,C+程序设计北京清华大学出版社3谭锋,章伟聪,Visual c+程序设计实训教程北京科学出版社七、附录(核心代码)#include using namespace std;class node public:node(int i):data(i),lchild(NULL),rchild(NULL)void inorder(node*&root)/中序遍历,符合升序输出 if(ro
20、ot!=NULL)inorder(root-lchild);coutdata rchild);void insert(node*&ptr,int item)/在查找树中插入元素 if(ptr=NULL)ptr=new node(item);else if(itemdata)insert(ptr-lchild,item);else insert(ptr-rchild,item);node*find(node*&ptr,int item)/在查找树中查找元素,找到返回所在结点指针,找不到返回空指针。if(ptr=NULL)return NULL;if(ptr-data=item)return pt
21、r;else if(itemdata)名师资料总结-精品资料欢迎下载-名师精心整理-第 21 页,共 25 页 -第-19-页find(ptr-lchild,item);else find(ptr-rchild,item);node*&findy(node*&ptr,int item)/在查找树中查找肯定存在的元素,并返回其引用 if(ptr-data=item)return ptr;else if(itemdata)findy(ptr-lchild,item);else findy(ptr-rchild,item);node*rl()return lchild;node*rr()return
22、 rchild;void dele(node*&ptr)/删除值为 item 所在结点 if(ptr-rl()=NULL&ptr-rr()=NULL)ptr=NULL;名师资料总结-精品资料欢迎下载-名师精心整理-第 22 页,共 25 页 -第-20-页else if(ptr-rr()=NULL)ptr=ptr-rl();else ptr=ptr-rr();private:int data;node*lchild;/左孩子结点node*rchild;/右孩子结点;int main()int t,i=0,j;cout 谢岳松-218-二叉排序树的实现endl;cout1.二叉排序树 T 的输入
23、:endl;coutt;cout输入tj;node*x=new node(j);for(;ij;x-insert(x,j);coutinorder(x);/作中序遍历coutn;cout2.二叉排序树 T 的元素查找和删除:endl;coutn 输入操作(当输入-1 时程序结束):j;while(j!=-1)node*t=x-find(x,j);/定位结点if(t!=NULL)名师资料总结-精品资料欢迎下载-名师精心整理-第 24 页,共 25 页 -第-22-页node*&y=x-findy(x,j);x-dele(y);coutinorder(x);else cout无j;coutn 输入操作(当输入-1 时程序结束):j;return 0;名师资料总结-精品资料欢迎下载-名师精心整理-第 25 页,共 25 页 -