数据结构课程方案小组报告模板
数据结构课程设计实验报告完整版
数据结构课程设计实验报告完整版【正文】一、实验目的本实验主要目的是通过实践,掌握数据结构的基本概念、常见数据结构的实现方式以及在实际应用中的应用场景和效果。
二、实验背景数据结构是计算机科学与技术领域中的一个重要概念,是研究数据的组织方式、存储方式、访问方式以及操作等方面的方法论。
在计算机科学领域,数据结构是实现算法和解决问题的基础,因此对数据结构的理解和应用具有重要意义。
三、实验内容本次数据结构课程设计实验主要分为以下几个部分:1. 实验环境的准备:包括选择合适的开发平台、安装必要的软件和工具。
2. 实验数据的收集和处理:通过合适的方式收集实验所需的数据,并对数据进行处理和整理。
3. 数据结构的选择和实现:根据实验需求,选择合适的数据结构,并进行相应的数据结构实现。
4. 数据结构的测试和优化:对所实现的数据结构进行测试,包括性能测试和功能测试,并根据测试结果对数据结构进行优化和改进。
5. 实验报告的撰写:根据实验过程和结果,撰写完整的实验报告,包括实验目的、实验背景、实验内容、实验结果和结论等。
四、实验过程1. 实验环境的准备本实验选择了Visual Studio作为开发平台,安装了相应版本的Visual Studio,并根据官方指引进行了相应的配置和设置。
2. 实验数据的收集和处理本实验选取了一份包含学生信息的数据集,包括学生姓名、学号、性别、年龄等信息。
通过编写Python脚本,成功提取了所需信息,并对数据进行了清洗和整理。
3. 数据结构的选择和实现根据实验需求,我们选择了链表作为数据结构的实现方式。
链表是一种常见的动态数据结构,能够高效地插入和删除元素,适用于频繁插入和删除的场景。
在实现链表时,我们定义了一个节点结构,包含数据域和指针域。
通过指针的方式将节点连接起来,形成一个链式结构。
同时,我们还实现了相关的操作函数,包括插入、删除、查找等操作。
4. 数据结构的测试和优化在完成链表的实现后,我们对其进行了性能测试和功能测试。
数据结构课程设计报告模板
数据结构课程设计报告模板篇一:数据结构课程设计报告模板课程设计说明书课程名称:数据结构与算法专业:计算机科学与技术班级: 103013姓名:徐粤玲学号:03成绩:完成日期:XX年1 月 12日任务书摘要本文的研究工作在于利用计算机模拟人脑进行下黑白棋,计算机下棋是人工智能领域中的一个研究热点,多年以来,随着计算机技术和人工智能技术的不断发展,计算机下棋的水平得到了长足的进步该程序的最终胜负是由棋盘上岗双方的棋子的个数来判断的,多的一方为胜,少的一方为负。
所以该程序主要运用的战术有削弱对手行动战术、四角优先战术、在游戏开局和中局时,程序采用削弱对手行动力战术,即尽量减少对手能够落子的位置;在游戏终局时则采用最大贪吃战术,即尽可能多的吃掉对手的棋子;而四角优先战术则是贯穿游戏的始终,棋盘的四角围稳定角,不会被对手吃掉,所以这里是兵家的必争之地,在阻止对手进角的同时,自己却又要努力的进角。
关键词:黑白棋编程设计s目录1.引言 ................................................ ................................................... .. (4)2.课题分析 ................................................ ................................................... (7)3.具体设计过程 ................................................ ....................................................8设计思路 ................................................ ...................................................8程序设计流程图 ................................................ (8)函数实现说明 ................................................ .. (12)4.程序运行结果 ................................................ ..................................................145.软件使用说明 ................................................ ..................................................186.结论 ................................................ ................................................... (21)参考文献 ................................................ ................................................... . (23)附录:源代码 ................................................................................................... .. 241.引言数据结构在计算机科学界至今没有标准的定义。
数据结构课程设计报告模板
陕西科技大学数据结构课程设计报告课设题目黑白棋人机对打游戏姓名孑澈班级网络123班学号1234.。
手机1234.。
邮箱1234.。
@ 电气与信息工程学院黑白棋人机游戏一、设计课题C语言实现黑白棋人机对打利用所学的C语言和数据结构知识,通过编程软件编写和设计黑白棋算法,完成基本的游戏功能,实现人机对玩,且富有一定的挑战性和趣味性。
二、设计内容1、小组工作说明1.起初我们在一起讨论了课设题目,需要用到的数据结构知识,算法,列出了整体框架,流程2.按照框架分好了每个人的任务,本页所示。
分头去查阅资料,完成各自的任务,随时在讨论在一起合程序,运行调试。
一起努力,看到了黎明的曙光。
孑澈人机构思设计和函数主体建立与调试百灵游戏优先级设计和游戏bug的寻找及游戏体验反馈顾客游戏界面设计,输入和输出调谐// 说明课题的总体目标,不作为报告的主体部分// 其它帮助读者理解个人任务所必须的信息2、个人工作说明我主要负责函数整体的调试和人机部分的c语言实现,利用12的游戏优先级设计,共同转化成c语言,使其能稳定的运行不出现bug,再要注意和邓涛涛的游戏界面及输入输出配合好,使得人机游戏可以畅快便捷的运行,方便玩家可以快乐的玩耍。
我们通过二维数组实现了郭奇的优先级排列,并针对出现的问题进行了逐个矫正,例如出现连续机器输入数次数据,我们通过调整if满足的条件语句,实现了合理的跳出,原本起初使用两个for语句套用再加上其他if或while满足的语句实现优先级的完美排列,可惜由于多次尝试总会出现莫名的问题,我们不得不放弃这一条道路,选择了二维数组作为实现载体,再利用穷举法对可能落点带来输的可能,我们利用if语句降低他的优先级.并进行成十上百次模拟游戏尝试排列出较好的优先级排布,从而基本实现了人机对打的功能。
利用栈的方式列举了边角稳定子满足的条件函数,使得落点随着棋局的变化而改变着自身的优先级,使得更加灵活,获胜的几率大大提高。
数据结构课程设计报告模板
课程设计报告
课程设计名称:数据结构
系:计算机科学系
学生姓名:
班级:
学号:
成绩:
指导教师:
开课时间:学年学期
一.设计题目
二.主要内容
(所选课题的需求分析,实现功能等)
三.课题设计的基本思想,原理和算法描述
(包括课题所用数据结构,界面设计、输入/输出设计,功能模块设计,符号说明等)
四.源程序及注释
五、运行示例及结果分析
(截图分析)
六、调试和运行程序过程中产生的问题及采取的措施
七、总结和展望
(400字以上)
八、参考资料
(格式为:[序号]作者.书名.出版社,出版年份如:
[1] 李建学等著.数据结构课程设计案例精编.清华大学出版社,2007
[2] 唐宁九等主编.数据结构与算法(C++版)实验和课程设计教程. 清华大学出版社,2008)
注:以上所有正文内容(所给八个标题除外)均采用小四字体书写,且每段首行缩进,段落间距1.3倍行距。
《数据结构》课程设计报告模板模
《数据结构》课程设计报告设计题目航班信息的查询与检索专业电子信息工程班级姓名学号完成日期2010-6-28目录1. 问题描述………………………………………………页码2. 系统设计………………………………………………页码3. 数据结构与算法描述…………………………………页码4. 测试结果与分析………………………………………页码5. 总结…………………………………………………页码6. 参考文献………………………………………………页码附录程序源代码…………………………………………页码航班信息的查询与检索1. 问题描述:这学期,我们在余先伦老师的带领下,大致学习了一下《数据结构》,实现了简单的数据结构算法。
现在,我们将完成简单的数据结构课程设计。
在数据结构的学习中我们知道,排序和查找是在数据结构中使用频率非常高。
为了能够快速有效地进行查询与检索,我们需要对记录按关键字进行排列。
选择《航班信息查询与检索》这个课题,主要是因为当今时代的需求。
随着科技与经济的发展,当今乘飞机的人越来越多,这时,快速的了解各类航班的班次、时间、价格及机型的信息将备受关注。
在我开发的这个《航班信息查询与检索》这个系统中,航班号将成为关键字,而且是具有结构特点的一类关键字。
通过关键字的键入,你将获得你所需要的航班的全部信息。
2. 系统设计2.1 设计目标:通过一定的数据结构,实现对信息的查询与检索并按要求输出。
试设计一个航空客运定票系统。
[基本要求]每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。
系统能实现的操作和功能如下:1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少余订票额,则需重新询问客户要求。
《数据结构》课程设计报告范本(doc 8页)
《数据结构》课程设计报告范本(doc 8页)《数据结构》课程设计报告一、课程设计的内容、要求1 线性表的另一种实现。
对顺序表空间被耗尽问题的一个解决办法是:当数组溢出时,用一个更大的数组替换该数组。
一个较好的法则是:当出现溢出时,数组长度加长一倍具有较高的时间和空间效率。
参照教材中顺序表的有关内容,按上面的要求实现顺序表,并测试当数组溢出时你的实现的运作情况。
二、所采用的数据结构ADT List{数据对象: D = {a i|a i ∈ElemSet, i=1,2…n>=0}数据关系: R1={<a i-1, a i>|a i-1, a i∈D, i=1,2,…,n}基本操作:void IniList(SqList& L);void DestroyList(SqList& L);bool ListEmpty(SqList L);int ListLength(SqList L);void GetElem(SqList L, int i, Elem &e);bool PriorElem(SqList L, Elem cur_e, Elem &pre_e);bool NextElem(SqList L, Elem cur_e, Elem &next_e);void ListInsert(SqList &L, int i, Elem e);void ListDelete(SqList &L, int i);void ClearList(SqList& L);}三、主要模块(或函数)及其功能typedef struct LIST{ElemType *data;int size;int max_size;}LIST;void InitList(LIST *list)//初始化{list->data = (int*)malloc(sizeof(ElemType)*INIT_SIZE);list->size = 0;list->max_size = INIT_SIZE;}void DestroyList(LIST &list){}bool NextElem(LIST list,int cur_e,int &next_e)//后继{if(cur_e < 0 || cur_e > list.size) return false;else{next_e = cur_e + 1;return true;}}void Insert(LIST *list,ElemType value){if(list->size>=list->max_size){int i;ElemType *temp = (int*)malloc(sizeof(ElemType)*list->size*2);cout<<endl<<"线性表原容量改变:原大小为"<<list->max_size;for(i=0;i<list->size;i++){temp[i] = list->data[i];}free(list->data);list->data = temp;list->max_size*=2;cout<<"改变后大小"<<list->max_size<<endl;}list->data[list->size] = value;list->size++;}void Insert_Back(LIST *list,int idx,ElemType value){if(list->size>=list->max_size){int i;ElemType *temp = (int*)malloc(sizeof(ElemType)*list->size*2);cout<<endl<<"线性表原容量改变:原大小为"<<list->max_size;for(i=0;i<list->size;i++){temp[i] = list->data[i];}free(list->data);list->data = temp;list->max_size*=2;cout<<"改变后大小"<<list->max_size<<endl;}if(idx>list->size){list->data[list->size] = value;}else{int i;for(i=list->size;i>idx;i--){list->data[i] = list->data[i-1];}list->data[idx] = value;}list->size++;}void ListDelete(LIST *list,int i,ElemType *e)//删除一个元素{int j;*e=list->data[i];for(j=i+1;j<=list->size-1;j++)list->data[j-1]=list->data[j];list->size--;}void Print_list(LIST *list){int i;if(list->size == 0){cout<<"当前线性表内没有元素。
《数据结构》课程设计报告
《数据结构》课程设计报告一、课程目标《数据结构》课程旨在帮助学生掌握计算机科学中数据结构的基本概念、原理及实现方法,培养其运用数据结构解决实际问题的能力。
本课程目标如下:1. 知识目标:(1)理解数据结构的基本概念,包括线性表、栈、队列、串、数组、树、图等;(2)掌握各类数据结构的存储表示和实现方法;(3)了解常见算法的时间复杂度和空间复杂度分析;(4)掌握排序和查找算法的基本原理和实现。
2. 技能目标:(1)能够运用所学数据结构解决实际问题,如实现字符串匹配、图的遍历等;(2)具备分析算法性能的能力,能够根据实际问题选择合适的算法和数据结构;(3)具备一定的编程能力,能够用编程语言实现各类数据结构和算法。
3. 情感态度价值观目标:(1)培养学生对计算机科学的兴趣,激发其探索精神;(2)培养学生团队合作意识,提高沟通与协作能力;(3)培养学生面对问题勇于挑战、善于分析、解决问题的能力;(4)引导学生认识到数据结构在计算机科学中的重要地位,激发其学习后续课程的兴趣。
本课程针对高年级学生,课程性质为专业核心课。
结合学生特点,课程目标注重理论与实践相结合,强调培养学生的实际操作能力和解决问题的能力。
在教学过程中,教师需关注学生的个体差异,因材施教,确保课程目标的达成。
通过本课程的学习,学生将具备扎实的数据结构基础,为后续相关课程学习和职业发展奠定基础。
二、教学内容根据课程目标,教学内容主要包括以下几部分:1. 数据结构基本概念:线性表、栈、队列、串、数组、树、图等;教学大纲:第1章 数据结构概述,第2章 线性表,第3章 栈和队列,第4章 串。
2. 数据结构的存储表示和实现方法:教学大纲:第5章 数组和广义表,第6章 树和二叉树,第7章 图。
3. 常见算法的时间复杂度和空间复杂度分析:教学大纲:第8章 算法分析基础。
4. 排序和查找算法:教学大纲:第9章 排序,第10章 查找。
教学内容安排和进度如下:1. 第1-4章,共计12课时,了解基本概念,学会使用线性表、栈、队列等解决简单问题;2. 第5-7章,共计18课时,学习数据结构的存储表示和实现方法,掌握树、图等复杂结构;3. 第8章,共计6课时,学习算法分析基础,能对常见算法进行时间复杂度和空间复杂度分析;4. 第9-10章,共计12课时,学习排序和查找算法,掌握各类算法的实现和应用。
数据结构课程设计报告参考模板
山东理工大学计算机学院课程设计(数据结构)班级姓名学号指导教师二○一一年一月二十日课程设计任务书及成绩评定课题名称Ⅰ、题目的目的和要求:1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。
(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。
(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
2、设计题目要求:(给出你所选择的题目的要求描述)Ⅱ、设计进度及完成情况日期内容1.10-1.11 选取参考书,查阅有关文献资料,完成资料搜集和系统分析工作。
1.12~1.14 创建相关数据结构,录入源程序。
1.17~1.19 调试程序并记录调试中的问题,初步完成课程设计报告。
1.20~1.21 上交课程设计报告打印版并进行课程设计答辩,要求每个同学针对自己的设计回答指导教师3-4个问题。
考核结束后将课程设计报告和源程序的电子版交班长统一刻光盘上交。
Ⅲ、主要参考文献及资料[1] 严蔚敏数据结构(C语言版)清华大学出版社 1999[2] 严蔚敏数据结构题集(C语言版)清华大学出版社 1999[3] 谭浩强 C语言程序设计清华大学出版社[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○一一年一月二十一日目录第一章概述 (1)第二章系统分析 (2)第三章概要设计………………………………………………………第四章详细设计………………………………………………………第五章运行与测试……………………………………………………第六章总结与心得……………………………………………………参考文献………………………………………………………………第一章概述(以图书管理系统设计为例)课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。
数据结构专业课程设计方案报告模板参考
数据结构专业课程设计方案报告模板参考嘿,大家好!今天我来给大家分享一份关于数据结构专业课程的方案设计报告。
作为一名有着十年经验的大师,我可是见证了各种方案的诞生和演变。
那么,咱们废话不多说,直接进入主题吧!一、课程设计背景数据结构是计算机科学与技术领域的基础课程,对于培养同学们的逻辑思维能力、编程能力和算法设计能力具有重要意义。
随着信息技术的不断发展,数据结构的应用越来越广泛,已经成为各类软件开发、等领域的基础。
因此,本课程设计旨在帮助同学们掌握数据结构的基本原理和算法,提高同学们的实际编程能力。
二、课程设计目标1.理解数据结构的基本概念,熟悉各类数据结构的特点和应用场景。
2.学会使用常见的数据结构进行问题求解,具备分析问题和设计算法的能力。
3.掌握数据结构的基本算法,能够实现并优化相关算法。
三、课程设计内容1.线性表定义和特点常见操作(插入、删除、查找、排序等)应用场景(顺序存储、链式存储等)2.栈和队列定义和特点常见操作(入栈、出栈、入队、出队等)应用场景(递归、表达式求值、广度优先搜索等)3.树与二叉树定义和特点常见操作(创建、遍历、查找、插入、删除等)应用场景(查找排序、哈希表、优先队列等)4.图定义和特点常见操作(创建、遍历、查找、最短路径等)应用场景(社交网络、地图导航、最小树等)5.算法设计与分析常见算法(排序、查找、图算法等)时间复杂度分析空间复杂度分析四、课程设计方法1.理论教学:通过课堂讲解,使同学们了解数据结构的基本概念、原理和方法。
2.实践教学:通过上机实验,让同学们动手实现相关算法,提高编程能力。
3.课后作业:布置一些具有代表性的题目,让同学们独立思考,巩固所学知识。
五、课程设计评价1.课堂表现:考察同学们的出勤、发言、作业完成情况等。
2.上机实验:考察同学们的编程能力、算法实现情况等。
3.课后作业:考察同学们对知识点的掌握程度。
六、课程设计进度安排1.第一周:线性表2.第二周:栈和队列3.第三周:树与二叉树4.第四周:图5.第五周:算法设计与分析注意事项:1.理解深度与广度平衡每个数据结构都有其深奥的理论和复杂的实现细节,但初学者容易陷入要么只懂皮毛要么过度深入研究两极分化的困境。
《数据结构》课程设计报告书参考模板
《数据结构》课程设计报告报告(论文)题目: 1.迷宫问题2.哈夫曼编码作者所在系部:计算机科学与工程系作者所在专业:网络工程作者所在班级: B08522作者姓名:马洪彪作者学号: 20084052227指导教师姓名:贾振华完成时间: 2009年12月31日北华航天工业学院教务处制课程设计任务书摘要本次课设目的在于检验学生在《数据结构》课程一学期中的学习成果,从而加深学生对所学知识的进一步理解与巩固。
本次课程设计过程中我主要根据课本中的实现思想及算法编写程序,体现以课本知识的应用为主,在学习了线性表、栈、队列、二叉树、树和图等结构的基础上,以能够更加熟练的应用所学知识,并能结合一些著名算法来实现对一些实际问题的应用,例如,哈夫曼树等,从而更为深刻理解数据结构的内涵,熟悉它们各自的应用场合及方法。
有些在平时课程中并没有掌握的内容在这次课程设计中都是先通过看课本学懂了,然后再在课程设计中加深印象,实现算法的应用和扩展。
这次课程设计的设计内容主要是通过实际的例子和程序来实现课本中所学习的算法的应用。
我主要做了迷宫问题、哈夫曼编码/译码实现两个题目。
本文利用C++语言编写程序,分别实现了对自定义的迷宫有无路径的判定和发送端对待传送数据的编码和接收端对传送来的数据的译码。
其中,迷宫问题以栈的应用为基础,随机生成迷宫,然后寻找所以路径并输出,对没有路径的迷宫,继续随机生成,直到生成存在路径的迷宫。
哈夫曼编译系统分为五个功能模块:原始数据载入,打印编码规则、编码、译码。
以二叉树的应用为基础,包括统计信息,并通过构建哈夫曼树、对信息进行哈夫曼编码,将编码信息等存入文档。
两个系统均已经过全面的测试,能够很好的运行,达到了预期的效果。
关键词:数据结构栈和队列二叉树哈夫曼编码迷宫目录《数据结构》课程设计报告书 (1)第1章绪论 (1)1.1 课程设计选题的目的 (1)1.2 课程设计选题的背景和意义 (1)1.2.1课程设计选题的背景 (1)1.2.2课程设计选题的意义 (1)1.3 课题研究的主要内容 (2)第2章需求分析 (3)2.1 输入/输出形式和输出值的范围 (3)2.2 程序功能 (3)2.3 测试数据 (3)2.3.1正确的输入及输出结果 (3)2.3.2 错误的输入及输出结果 (5)第3章概要设计 (6)3.1 设计思想 (6)3.2 函数间的关系 (6)第4章详细设计 (7)4.1 迷宫的主要结构 (7)4.2 哈夫曼的主要结构 (8)第5章调试分析 (11)5.1 问题描述 (11)5.2解决方案 (11)5.3 对设计实现的回顾讨论和分析 (11)5.4 对算法的分析和改进设想 (11)5.5 经验和体会 (11)第6章测试并列出测试结果 (12)6.1 迷宫问题测试结果 (12)6.2 哈夫曼系统测试结果 (12)第7章总结 (16)7.1 设计体会 (16)7.1.1 系统的优点 (16)7.2 结束语 (16)致谢 (17)参考文献 (18)附录 (19)《数据结构》课程设计报告书第1章绪论随着信息产业的飞速发展,信息化管理及查询已经引入并应用到各行业管理领域,各种形式的百货商场、大型仓储超市、便利店、连锁超市和专卖店等形式的零售业鳞次栉比,不断改变、影响着人们的价值观念和生活方式。
数据结构课程设计报告模板范文
数据结构课程设计报告模板[贪吃蛇程序设计]一、 设计课题贪吃蛇程序设计二、 设计内容1. 工作说明(1)实现贪吃蛇小游戏的运行,各功能模块分别为食物类型的定义,蛇类型的定义,界面光标位置的显示,蛇的初始化,计分方向 码的转换输出(2否(3) 所用到的数据结构的知识及相关数据结构的描述形式数据类型的表示及实现,算法和算法分析,线性表的链式表示和实现,数组的顺序表示,动态存储管理等。
(4) 函数介绍a 界面光标位置函数:控制界面光标位置,为显示边界、食物等界面显示内容提供依据。
b.方向控制函数:经过键盘输入指定字母实现对蛇移动方向的控制。
c.初始化蛇函数:经过链表方式显示蛇的形象,并控制蛇的初始长度、初始移动方向及初始分数。
d.e.计分显示函数:经过引用界面光标位置函数,实现在指定界面位置输出分数。
f.控制蛇的死亡函数:讨论当蛇碰到左右上下边界以及咬到自身等几种情况时,经过引用库函数清除当前屏幕,再经过界面光标位置函数在指定位置输出"Game Over!"、"Press ESC to exit,any other key to retry!",接着经过选择是否继续游戏,如果是,经过引用库函数中的跳跃函数,回到指定位置循环程序;如果否,则结束游戏。
g.食物输出函数:经过引用库函数中的随机数函数随机输出食物,并当蛇吃到食物时,控制蛇长度增长,同时使用递归函数循环输出食物。
h.游戏实现过程函数:调用以上函数,实现蛇的移动、增长、死亡的具体游戏实现过程。
(5) 函数的调用关系(1)调用了gotoxy()函数的有:boundary()函数,getscoresys ()函数,isdead()函数,play()函数。
(2)play()函数调用的函数有:gotoxy()函数,boundary()函数,getscoresys()函数,isdead()函数。
(3)主函数main()调用了play()函数。
数据结构课设报告
《数据结构》课程设计报告一、设计目的《数据结构》是一门实践性较强的软件基础课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。
本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。
二、设计要求1、通过这次设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解。
同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
2、学生必须仔细研读《数据结构》课程设计(实习)要求,以学生自学为主、指导教师指导为辅,认真、独立地完成课程设计的任务,有问题及时主动与指导教师沟通。
3、本次课程设计按照教学要求需要在三周时间内独立完成,学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时地向指导教师汇报。
4、编程语言任选。
一〉.基础类题目1.猴子选大王(*)任务:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1--m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
要求:(注:分别顺序存储结构和链式存储实现)输入数据:输入m,n。
m,n 为整数,n<m输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能㈠、数据结构与核心算法的设计描述链式存储实现:#include<iostream.h>#include<malloc.h>#include<stdio.h>typedef struct LNode{int data;struct LNode *next;}LNode, *LinkList;void CreateList(LinkList &L,int m)//尾插法建立单向循环链表int ListDetele(LinkList &q,int n)//删除被点到的猴子㈡、程序调试及运行结果分析㈢、程序清单#include<iostream.h>#include<malloc.h>#include<stdio.h>typedef struct LNode{int data;struct LNode *next;}LNode, *LinkList;void CreateList(LinkList &L,int m){ //尾插法建立单向循环链表int i;L = (LinkList)malloc(sizeof(LNode));L->next = NULL;LNode *r;r = L;for(i=1;i<=m;i++){LNode *p;p = (LinkList)malloc(sizeof(LNode));p->data = i;r->next = p;r = p;}r->next=L->next;}int ListDetele(LinkList &q,int n) {LinkList s;int j=1;while(q->next!=q){ while(j<=n-1){q=q->next;j++;}s=q->next;q->next=s->next;free(s);j=1;}cout<<" 猴王: "<<q->data<<endl;return 1;}void main(){LinkList q;int n,m;cout<<"输入猴子个数m和n:";cin>>m>>n;CreateList(q,m);ListDetele(q,n);}顺序存储结构:㈠、数据结构与核心算法的设计描述#include<iostream.h>void main(){int n,m;cout<<"输入猴子数m和报数n:";cin>>m>>n;int *a=new int[m];int i,sum=0,count=m;//存剩余猴子数for(i=0;i<m;i++)a[i]=1;i=0;while(i<=m){if(i==m)i=0;//当i=n时,循环回去sum+=a[i];if(sum==n)//当报到n时{sum=a[i]=0; //淘汰倒霉猴子;即赋0count--;//剩余猴子数-1if(count==1)break;//剩1只时结束}i++;}for(i=0;i<m;i++)if(a[i]!=0)cout<<"猴王是"<<i+1<<endl;delete []a;}㈡、程序调试及运行结果分析2.线索二叉树(**)任务:1.建立中序线索二叉树,并且中序遍历;2. 求中序线索二叉树上已知结点中序的前驱和后继;㈠、数据结构与核心算法的设计描述#include<malloc.h>#include<stdlib.h>#include<iostream.h>#define MAX 100typedef enum PointerTag {Link,Thread}; //Link==0:指针,Thread==1:线索typedef struct BitNode{char data;struct BitNode *lchild,*rchild;//左右孩子的指针PointerTag LTag,RTag; //左右标志}BitNode, *Bitree;Bitree pre=NULL;Bitree point[MAX+1];int CreatBiTree(Bitree &T)//先序创建二叉树void InThreading(Bitree p)//中序遍历线索化二叉树int InOrderThreading(Bitree &Thrt,Bitree T)//中序遍历线索化二叉树T,并将其中序线索化,Thrt指向头节点Bitree InPre(Bitree p)//前驱Bitree InNext(Bitree p)//后继int Traverse_Thr(Bitree T)//各个节点的前驱和后继㈡、程序调试及运行结果分析㈢、程序清单#include<malloc.h>#include<stdlib.h>#include<iostream.h>#define MAX 100typedef enum PointerTag {Link,Thread}; //Link==0:指针,Thread==1:线索typedef struct BitNode{char data;struct BitNode *lchild,*rchild;//左右孩子的指针PointerTag LTag,RTag; //左右标志}BitNode, *Bitree;Bitree pre=NULL;Bitree point[MAX+1];int CreatBiTree(Bitree &T)//先序创建二叉树{ //该节点非空返回1,双亲节点对应标志Link,//空时返回0,双亲节点对应标志应为Threadchar ch;cout<<"输入结点元素(#表示空):";cin>>ch;if(ch=='#'){T=NULL;return 0;}else{if(!(T=(BitNode *)malloc(sizeof(BitNode)))) {cout<<"存储分配失败"<<endl;exit(1);}T->data=ch;if(CreatBiTree(T->lchild))T->LTag=Link;elseT->LTag=Thread;if(CreatBiTree(T->rchild))T->RTag=Link;elseT->RTag=Thread;}return 1;}void InThreading(Bitree p)//中序遍历线索化二叉树{if(p!=NULL){InThreading(p->lchild);//左子树线索化if(p->lchild==NULL) //前驱线索{p->LTag=Thread;p->lchild=pre;}if(pre->rchild==NULL)//后继线索{pre->RTag=Thread;pre->rchild=p;}pre=p; //保持pre指向p的前驱InThreading(p->rchild);//右子树线索化}}int InOrderThreading(Bitree &Thrt,Bitree T){//中序遍历线索化二叉树T,并将其中序线索化,Thrt指向头节点Thrt=(Bitree)malloc(sizeof(BitNode)); //申请头结点地址if(Thrt==NULL) exit(1);Thrt->LTag=Link; //建立头结点Thrt->RTag=Thread;Thrt->rchild=Thrt;//右指针回指if(T==NULL)Thrt->lchild=Thrt;//若二叉树为空,则左指针回指else{Thrt->lchild=T;pre=Thrt;InThreading(T); //中序遍历线索化二叉树pre->rchild=Thrt;pre->RTag=Thread;//最后一个结点的线索化Thrt->rchild=pre;}return 1;}Bitree InPre(Bitree p)//前驱{Bitree q;q=p->lchild;if(p->LTag==Thread)return(p->lchild);if(q==NULL){return NULL;}while(q->RTag==Link){q=q->rchild;}return (q);}Bitree InNext(Bitree p)//后继{Bitree q;q=p->rchild;if(p->RTag==Thread)return(p->rchild);if(q==NULL){return NULL;while(q->LTag!=Thread){q=q->lchild;}return(q);}int Traverse_Thr(Bitree T){int i=0;Bitree p;p=T->lchild;cout<<"1--代表是,0--代表否"<<endl;cout<<"是否有"<<"前驱"<<"节点"<<"是否有"<<"后继"<<"顶点序号"<<endl;cout<<" 前驱"<<" "<<"节点"<<"后继"<<"while(p!=T)//空树或遍历结束时p==T{while(p->LTag==Link)p=p->lchild;//找开始结点cout<<p->LTag<<" ";if(p->LTag==Thread){cout<<InPre(p)->data<<" ";}elsecout<<" ";cout<<p->data<<" ";point[i++];cout<<p->RTag<<" ";if(p->RTag==Thread)cout<<InNext(p)->data<<" ";elsecout<<" ";cout<<i<<endl; point[i]=p;while(p->RTag==Thread&&p->rchild!=T)//寻找后继结点{p=p->rchild;cout<<p->LTag<<" ";if(p->LTag==Thread){cout<<InPre(p)->data<<" ";}elsecout<<" ";cout<<p->data<<" ";point[i++];cout<<p->RTag<<" ";if(p->RTag==Thread)cout<<InNext(p)->data<<" ";elsecout<<" ";cout<<i<<endl;point[i]=p;}p=p->rchild;}return i;}int main(){Bitree T,Thrt,prenode,Nextnode;int n,index;char str;cout<<"先序创建二叉树"<<endl;CreatBiTree(T);cout<<endl;InOrderThreading(Thrt,T);n=Traverse_Thr(Thrt);do {cout<<"请输入你要查找节点的序号(按中序输出时的序号)"<<endl;cin>>index;if(index<0||index>n){cout<<"请输入数的序号大于0并小于等于节点数"<<endl;return 0;}prenode=InPre(point[index]);Nextnode=InNext(point[index]);if(point[index]->LTag==Thread)cout<<"你要查找第"<<index<<"个节点的前驱结点为"<<prenode->data<<endl;elsecout<<"你要查找第"<<index<<"个节点无前驱结点"<<endl;if(point[index]->RTag==Thread)cout<<"你要查找第"<<index<<"个节点后继结点为"<<Nextnode->data<<endl;elsecout<<"你要查找第"<<index<<"个节点无后继结点"<<endl;cout<<"你是否要继续?y--是;n--否"<<endl;cin>>str;}while(str=='Y'||str=='y');return 0;}3.宿舍管理查询软件(**)任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:(1)采用交互工作方式(2)可以增加、删除、修改信息(3)建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(选择、快速排序、堆排序等任选一种)(4) 查询 : a.按姓名查询 ;b.按学号查询 ;c按房号查询(5) 打印任一查询结果(可以连续操作)㈠、数据结构与核心算法的设计描述#include<iostream.h>#include<string.h>#include<stdlib.h>#define MAXSIZE 100int n;typedef struct //学生结构体的定义{int num;//学号char name[10];//姓名char room[10];//房号}Student;typedef struct SqList//顺序表结构体的定义{Student Stu[MAXSIZE+1];//定义一个存放学生信息的数组}SqList;void CreatInfo(SqList &L) //建立学生信息void print(SqList &L)//输出顺序表void Insertsort(SqList &L)//直接插入排序(房号优先)void InPut(SqList &L)//添加新的学生信息int Partition(SqList &L,int i,int j)//快速排序void Quicksort(SqList L,int low,int high)//快速排序void Selectsort(SqList &L)//选择排序(姓名优先) void find(SqList &L,int n)//查找修改学生并打印㈡、程序调试及运行结果分析1.建立学生信息2.插入学生信息并插入排序(房号优先)3.选择排序(姓名优先)4.快速排序5.查找修改学生并打印㈢、程序清单#include<iostream.h>#include<string.h>#include<stdlib.h>#define MAXSIZE 100int n;typedef struct //学生结构体的定义{int num;//学号char name[10];//姓名char room[10];//房号}Student;typedef struct SqList//顺序表结构体的定义{Student Stu[MAXSIZE+1];//定义一个存放学生信息的数组}SqList;void CreatInfo(SqList &L){cout<<"请输入你要创建的学生数:"<<endl;cin>>n;cout<<"学生的信息:"<<endl;cout<<"姓名学号房号:"<<endl;for(int i=1;i<=n;i++){cin>>L.Stu[i].name>>L.Stu[i].num>>L.Stu[i].room;}}void print(SqList &L)//输出顺序表{cout<<"输出学生信息:"<<endl;for(int i=1;i<=n;++i){cout<<L.Stu[i].name<<" "<<L.Stu[i].num<<" "<<L.Stu[i].room<<endl;}}void Insertsort(SqList &L)//直接插入排序(房号优先){int i,j;for(i=2;i<=n;++i)if(strcmp(L.Stu[i].room,L.Stu[i-1].room)<0){L.Stu[0]=L.Stu[i];for(j=i-1;strcmp(L.Stu[0].room,L.Stu[j].room)<0;--j)L.Stu[j+1]=L.Stu[j];L.Stu[j+1]=L.Stu[0];}}void InPut(SqList &L){n++;cout<<"输入学生的信息:"<<endl;cout<<"姓名学号房号:"<<endl;cin>>L.Stu[n].name>>L.Stu[n].num>>L.Stu[n].room;}int Partition(SqList &L,int i,int j)//快速排序{Student p;L.Stu[0]=L.Stu[i];p=L.Stu[i];while(i<j){while(i<j &&L.Stu[j].num>=p.num)j--;L.Stu[i]=L.Stu[j];while(i<j &&L.Stu[i].num<=p.num)i++;L.Stu[j]=L.Stu[i];}L.Stu[i]=p;return i;}void Quicksort(SqList L,int low,int high)//快速排序{int location;if(low<high){location=Partition(L,low,high);Quicksort(L,low,location-1); //对左区间递归排序Quicksort(L,location+1,high); //对右区间递归排序}}void Selectsort(SqList &L)//选择排序(姓名优先){Student t;int i,j,k;for(i=1;i<=n;i++){k=i;for(j=i+1;j<=n;j++)if(strcmp(L.Stu[j].name,L.Stu[k].name)<0)k=j;if(k!=i){t=L.Stu[i];L.Stu[i]=L.Stu[k];L.Stu[k]=t;}}}void find(SqList &L,int n)//查找学生信息{int t,m=1,i;char ch,a;cout<<"请输入你要查找的学号:"<<endl;cin>>t;cout<<"该学生的信息为:"<<endl;while(m<=n&&L.Stu[m].num!=t)m++;if(L.Stu[m].num==t){cout<<"学号是:"<<L.Stu[m].num<<"\t姓名:"<<L.Stu[m].name<<"\t房号:"<<L.Stu[m].room<<endl;cout<<"是否修改信息(Y/N):";cin>>a;if(a=='y'||ch=='Y'){cout<<"1.修改学号"<<endl;cout<<"2.修改姓名"<<endl;cout<<"3.修改房号"<<endl;cout<<"请选择:";cin>>i;switch(i){case 1:cout<<"输入修改学号:";cin>>L.Stu[m].num;break;case 2:cout<<"输入修改姓名:";cin>>L.Stu[m].name;break;case 3:cout<<"输入修改房号:";cin>>L.Stu[m].room;break;default:cout<<"输入错误!"<<endl;}}}elsecout<<"没有你要查找的学生!"<<endl;cout<<"是否打印学生信息(Y/N):";cin>>ch;if(ch=='y'||ch=='Y')print(L);}int main(){SqList L;int k;CreatInfo(L);//创建学生信息print(L);//按输入顺序打印出顺序表loop: cout<<"请选择排序方式:"<<endl;cout<<"1 插入学生信息"<<endl;cout<<"2 插入排序(房号优先)"<<endl;cout<<"3 选择排序(姓名优先)"<<endl;cout<<"4 快速排序"<<endl;cout<<"5 按查找修改学生并打印"<<endl;cout<<"0 退出排序程序"<<endl;cin>>k;if(k!=0){switch(k){case 1:InPut(L);break;case 2:Insertsort(L);//进行插入排序print(L);break; //输出插入排序后的顺序表case 3:Selectsort(L);//进行选择排序print(L);break;//输出排序后的顺序表case 4:Quicksort(L,1,n);//选择快速排序print(L);break;//输出排序后的顺序表case 5:find(L,n);break;//查找学生信息default:cout<<"输入错误!"<<endl;}}cout<<endl;goto loop;return 0;}4.停车场管理(**)任务:设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
数据结构课程设计小组报告
数据结构课程设计----小组设计报告目录1组内成员贡献表 (3)2 课程设计目的 (3)3 课程设计内容和要求 (3)4 任务完成情况 (4)5 设计报告 (5)5.1树和二叉树5.1.1 设计目的。
55.1.2 设计内容及要求。
55.1.3 需求分析。
65.1.4 概要设计。
65.1.5 详细代码。
85.1.6 使用说明。
85.1.7 测试结果与分析。
95.1.8 体会与感想。
14 5.2选做题5.2.1 设计目的。
165.2.2 设计内容及要求。
165.2.3 需求分析。
165.2.4 概要设计。
165.2.5 详细代码。
175.2.6 使用说明。
195.2.7 测试结果与分析。
19 5.2.8 体会与感想。
201组内成员贡献表表1-1 组内成员贡献表2 课程设计目的1、学习获取知识的方法;2、提高发现问题、分析问题和解决实际问题的能力;3、加强创新意识和创新精神;4、加强团队的分工与合作;5、掌握面向实际背景思考问题的方法。
3 课程设计内容和要求要求:1、完成树形结构的设计任务,其中选做题不是必须完成的任务。
2、每项目小组提交一份课程设计报告,内容包括:课题名称,课题参加人员名单和分工,课题的目的,课题内容,需求分析、概要设计、主要代码分析、测试结果、课题特色和创新之处、收获与体会、使用说明。
3、个人必须在完成个人任务的基础上提交个人任务的设计报告,内容包括:任务名称、目的、具体内容、需求分析、概要设计、主要代码分析、测试结果、收获与体会。
无论是个人任务还是小组任务希望各小组团队合作,小组成员之间应互相讨论,互相启发。
4完成情况任务完成情况介绍,如表3-1.表3-1 任务完成情况表完成任务名称树和二叉树选做题5 设计报告5.1 树与二叉树5.1.1 设计目的*熟悉并掌握树与二叉树的应用*增加编程动手能力等。
5.1.2 设计内容及要求(1)输入字符序列,建立二叉链表。
(2)遍历二叉树输出。
(前序、中序、后序递归遍历)(实现其一)(3)把二叉树的叶子结点按从左到右的顺序连成一个单链表,表头指针为head。
《数据结构》课程设计报告
《数据结构》课程设计报告《数据结构》课程设计报告如下:一、课程设计分析在学习了数据结构课本理论知识后,为了检验自己所学知识的牢固性巩固大家的理论知识,调动大家的编程兴趣;同时为大家提供一个实践自己,检验自己的平台,以增加大家对将来工作的适应能力;也为了锻炼大家的动手实践能力,遂在学期末进行了本次课程设计。
“数据结构”在计算机科学中是一门综合性的专业基础课。
“数据结构”的研究不仅涉及到计算机硬件的研究范围,而且和计算机软件的研究有着密切的关系,无论是编译程序还是操作系统,都涉及到数据元素在存储器中的分配问题。
在研究信息检索时也必须考虑如何组织数据,以便查找和存取数据元素更为方便。
因此,可以认为“数据结构”是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。
在计算机科学中,“数据结构”不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序和大型应用程序的重要基础。
我们本着自己的兴趣及挑战自己的态度,也为检验我们理论知识的熟练度,锻炼我们动手实践能力,我们选择了小型图书管理系统的编写。
因为我们生活在大学,图书馆是我们学习的天堂,借书和还书又是必不可少的,一个好的图书管理系统对于我们学生和管理人员都会为大家提供很多便利。
本着挑战和创新的思想,我们进行了此次课程设计程序编写及报告撰写。
二、课程设计基本理论运用所学的数据结构相关内容,设计一个小型图书馆管理系统,我们将运用到的原理有:链表的操作,包括插入,删除等;还有数据的排序;文件的操作等;遍历查找,插入排序等原理。
也运用了c语言的基本图形界面,使用户使用界面更加人性化,更加美观。
数据结构的创建是本课程设计的一个重要内容,我们这里使用的是单链表的数据结构,结合c语言语言特点、实际的图书馆管理系统的基本操作实现了一个简单的图书管理系统的正常运行,实现一些简单的功能。
三、课程算法设计通过对图书管理系统内的图书进行添加和删除操作,实现同学借书和还书的记录工作,通过对图书的查找和按指定方式排序,更有利于同学们挑选自己所需要的图书,借阅借书所需时间。
数据结构课程设计——小组任务
数据结构课程设计----小组设计报告专业:计算机科学与技术班级:组号: 10 组长姓名(学号):副组长姓名(学号):组员姓名(学号):指导教师:冯向阳日期:16年1月6日至16年1月14日目录1组内成员贡献表 (3)2 课程设计目的 (3)3 课程设计内容和要求 (3)4 任务完成情况 (3)5 设计名称 (4)5.1图 (4)5.1.1 设计目的 (4)5.1.2 设计内容及要求 (4)5.1.3 需求分析 (5)5.1.4 概要设计 (5)5.1.5 详细代码 (8)5.1.6 使用说明 (8)5.1.7 测试结果与分析 (8)5.2赫夫曼编码的应用 (14)5.2.1设计目的 (14)5.2.2设计内容及要求 (14)5.2.3需求分析 (14)5.2.4概要设计 (14)5.2.5详细代码 (15)5.2.6使用说明 (15)5.2.7测试结果与分析 (16)5.3 体会与感想 (18)6 参考文献 (19)附录 (19)附录一: (19)附录二: (24)附录三: (29)附录四:................................................................................................. 错误!未定义书签。
附录五: (31)1组内成员贡献表表1-1 组内成员贡献表2 课程设计目的1、学习获取知识的方法;2、提高发现问题、分析问题和解决实际问题的能力;3、加强创新意识和创新精神;4、加强团队的分工与合作;5、掌握面向实际背景思考问题的方法。
3 课程设计内容和要求内容:第一章前言第二章顺序表与链表第三章树与二叉树第四章图第五章赫夫曼编码要求:完成第2章、第3章中每章2个设计任务中的至少一个任务。
在完成个人任务1的基础上,完成第4章2个设计任务中的至少一个任务。
每人必须在完成个人任务的基础上提交个人任务的设计报告,内容包括:任务名称、目的、具体内容、需求分析、概要设计、主要代码分析、测试结果、收获与体会。
数据结构课程设计报告(网络101)参考模板
课程设计报告
设计名称:数据结构课程设计
选题名称:连云港市景点导游咨询系(院):计算机工程学院
设计时间:2012.12.24~2013.1.4
设计地点:软件工程实验室、教室
古城---->孔子忘角---->玉女峰路径长度:25公里
4.查询所有路径
如:选出出发地:孔望山
目的地:连岛
系统输出如下:
孔望山---->连岛
孔望山---->前三岛---->枫树湾---->连岛
孔望山---->前三岛---->枫树湾---->桃花涧---->连岛
孔望山---->---->前三岛---->枫树湾---->桃花涧---->东海温泉---->连岛
结果正确
5.动态添加景点
动态添加,目前只能添加进信息,方便查询,还未实现求路径的功能。
五用户手册
本程序界面如下:
按序号进行操作!
六测试成果
1、查询景点
2、查询所有路径
3、查询最短路径
4、添加景点
友情提示:范文可能无法思考和涵盖全面,供参考!最好找专业人士起草或审核后使用,感谢您的下载!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计----小组设计报告专业:计算机科学与技术班级:计算机科学与技术06**组号:201组长姓名<学号):张三(060******>副组长姓名<学号):张三(060******>组员姓名<学号):张三(060******>指导教师:冯向阳、陈志良日期:08年1月10日至08年1月20日目录1组内成员贡献表表1-1 组内成员贡献表2 课程设计目的1、学习获取知识的方法;2、提高发现问题、分析问题和解决实际问题的能力;3、加强创新意识和创新精神;4、加强团队的分工与合作;5、掌握面向实际背景思考问题的方法。
3 课程设计内容和要求内容:第一章前言第二章航班信息的查询与检索第三章树结构的应用第四章图结构的应用第五章大数四则运算第六章综合应用——图书管理信息系统的设计和实现要求:完成第2章、第3章中每章2个设计任务中的至少一个任务。
在完成个人任务1的基础上,完成第4章2个设计任务中的至少一个任务。
每人必须在完成个人任务的基础上提交个人任务的设计报告,内容包括:任务名称、目的、具体内容、需求分析、概要设计、主要代码分析、测试结果、收获与体会。
无论是个人任务还是小组任务希望各小组团队合作,小组成员之间应互相讨论,互相启发。
4 任务完成情况任务完成情况介绍,如表3-1.<仅供参考,请根据实际完成情况填写)5 设计名称5.1 设计目的根据内容填写5.2 设计内容及要求本程序用VC编写,完成以下功能:根据内容填写5.3 需求分析下列仅供参考<请根据内容填写)本程序用VC编写,完成二叉树的生成二叉链表、递归中序遍历、非递归中序遍历、层次遍历、计算二叉树的深度及叶子个数、建立线索二叉树并实现中序遍历等功能,并且需要一个菜单让用户自主选择执行的功能。
①输入的形式和输入值的范围:元素输入时,元素的值都是char型,以“#”为空结点。
②输出的形式:在每次选择菜单后,都输出相应的结果,并且询问下次操作的工程。
③程序所能达到的功能:完成单链表的二叉树的生成二叉链表、递归中序遍历、非递归中序遍历、层次遍历、计算二叉树的深度及叶子个数、建立线索二叉树并实现中序遍历。
每次操作结束后,都会有菜单方便用户进行下一步的操作。
④测试数据:A.菜单显示为:-----------------------菜单---------------------------A----------------------二叉树建立B----------------------递归中序遍历C----------------------非递归中序遍历D----------------------层次遍历E----------------------求二叉树的深度F----------------------求二叉树的子叶个数G---------------------线索二叉树的建立及遍历H----------------------退出请输入您要测试的工程:B.二叉树建立»选择A或a»显示 “请按先序建立二叉树的结点序列<以“#”为空结点):”»输入 ABC##DE##F##G##»输出完成创建二叉树!C.递归中序遍历»选择B或b»显示 “该二叉树的递归中序遍历序列为:”»输出 C B E D F A GD.非递归中序遍历»选择C或c»显示 “该二叉树的非递归中序遍历序列为:”»输出 C B E D F A GE.层次遍历»选择D或d»显示 “该二叉树层次遍历序列为:”»输出 C B E D F A GF.求二叉树的深度»选择E或e»显示 “该二叉树的深度为:”»输出 4G.求二叉树的子叶个数»选择F或f»显示 “该二叉树的子叶个数为:”»输出 4H.线索二叉树的建立及遍历»选择G或g»显示 “请按先序线索二叉树输入元素:”»输入 ABC##DE##F##G##»输出完成创建线索二叉树!»显示 “二叉树的线索化:”»输出线索化成功!»显示 “线索二叉树的中序遍历:”»输出 C B E D F A GI.退出程序»选择7»退出当前程序5.4 概要设计1)为了实现上述程序功能,需要定义单链表的抽象数据类型:下列仅供参考<请根据内容填写)CreateBinTree<&T)操作结果:构造一个先序存储的二叉树T,以“#”为空结点Inorder<T)初始条件:二叉树T已存在操作结果:将二叉树T按中序遍历InorderN<T)初始条件:二叉树T已存在操作结果:将二叉树T按中序遍历print_cengci<T)初始条件:二叉树T已存在操作结果:将二叉树T按层次遍历PostTreeDepth<T)初始条件:二叉树T已存在操作结果:将二叉树T的深度输出leaf<T)初始条件:二叉树T已存在操作结果:将二叉树T的叶子个数输出CreateBiThrTree<Tr)操作结果:构造一个先序存储的线索二叉树Tr,以“#”为空结点InOrderThreading<Tr)初始条件:线索二叉树Tr已存在操作结果:将二叉树Tr线索化InOrderTraverse_Thr<Tr)初始条件:线索二叉树Tr已存在操作结果:将线索二叉树Tr输出2)本程序包含9个函数:下列仅供参考<请根据内容填写)①主函数main(>②初始化二叉树函数CreateBinTree (>③递归中序遍历二叉树函数Inorder (>④非递归中序遍历二叉树函数Inorder N(>⑤层次遍历二叉树函数print_cengci (>⑥计算二叉树深度函数PostTreeDepth (>⑦计算二叉树叶子个数函数leaf l (>⑧初始化线索二叉树函数CreateBiThrTree (>⑨二叉树线索化函数InOrderThreading (>⑩线索二叉树输出函数 InOrderTraverse_Thr(>3)各函数间关系如下:下列仅供参考<请根据内容填写)CreateBinTree (>Inorder (>Inorder N(>print_cengci (> main(>PostTreeDepth (>leaf l (>CreateBiThrTree (>InOrderThreading (>InOrderTraverse_Thr(> 5.5 详细代码见附录一。
5.6 使用说明下列仅供参考<请根据内容填写)程序名为二叉树.exe,所有程序在VC++ 6.0环境下调试通过。
程序执行如图4-1。
图4-1 二叉树的程序执行图输入字母选择执行不同的功能。
要求首先创建二叉树或线索二叉树,才可以进行其他的操作。
每执行一次功能,就会显示执行的结果以及再次输出菜单,以便继续选择功能。
选择A或a:显示“请按先序建立二叉树的结点序列<以“#”为空结点):”,要求输入二叉树的结点,以“#”为空结点,显示“完成创建二叉树!”。
选择B或b:显示“该二叉树的递归中序遍历序列为:” 。
选择C或c:显示“该二叉树的非递归中序遍历序列为:”。
选择D或d:“该二叉树的层次遍历序列为:”。
选择E或e:显示“该二叉树的深度为:”。
选择F或f:显示“该二叉树的子叶个数为:”。
选择G或g:显示“请按先序线索二叉树输入元素:” ,要求输入线索二叉树的结点,以“#”为空结点,显示“完成创建线索二叉树!”,显示“二叉树的线索化:”,显示“线索化成功!”,显示“线索二叉树的中序遍历:”。
选择H或h:退出程序5.7 测试结果与分析下列仅供参考<请根据内容填写)1)建立二叉树:实验结果<文字说明并配图),如图4-2。
相应分析。
2) 递归中序遍历二叉树:下列仅供参考<请根据内容填写)运行结果<文字说明并配图),如图4-3。
相应分析。
3) 非递归中序遍历二叉树:实验结果<文字说明并配图),如图4-4。
图4-2 建立二叉树的程序执行图 图4-3 二叉树的递归中序遍历的程序执行图图4-4 二叉树的非递归中序遍历的程序执行图相应分析。
4)层次遍历:实验结果<文字说明并配图),如图4-5。
图4-5 二叉树的层次遍历的程序执行图相应分析。
5)计算二叉树的深度:实验结果<文字说明并配图),如图4-6。
图4-6 计算二叉树的深度的程序执行图相应分析。
6)计算二叉树的叶子个数:实验结果<文字说明并配图),如图4-7。
图4-7 计算二叉树的叶子个数的程序执行图相应分析。
7)初始化线索二叉树及其遍历:实验结果<文字说明并配图),如图4-8。
图4-8 初始化线索二叉树及其遍历的程序执行图相应分析。
8)退出程序:实验结果<文字说明并配图),如图4-9。
图4-8 退出程序的程序执行图相应分析。
5.8 体会与感想下列仅供参考<请根据内容填写)经过。
,对我的编程能力有了一定的提高。
所以这的实验相对来说完成的稍微快一些。
对于书上算法的实现,也有了一定的效率的提高。
由于线索二叉树的复杂,在其的初始化以及线索化上,都花费了一些时间。
最后还是参考了书以及其他人的程序,才得以实现。
今后,要提高编程的速度,同时在完成基本任务的情况下,也可以尝试着做一下老师布置的较高要求。
6 参考文献附录:设计名称的代码#include <stdio.h>#include <stdlib.h>#include<iostream.h>#define MAX 1000#define OVERFLOW 0#define OK 1int num_leaf=0。
typedef char ElemType。
typedef ElemType TElemType。
typedef struct node{TElemType data。
struct node *lchild,*rchild。
}BinTNode。
typedef enum PointerTag{Link,Thread}。
typedef struct BiThrNode{TElemType data。
struct BiThrNode *lchild,*rchild。
PointerTag LTag,RTag。