华南农业大学信息学院数据结构--课程设计报告
数据结构课程设计实验报告

华南农业大学课程论文 ( 设计 )课程名称数据结构指导老师张义青所在学院软件学院专业年级软件R5提交日期 2014-12-10 小组成员表华南农业大学信息学院课程设计实验起止日期:2014-2015学年第一学期需求分析b)概要设计我负责的所有功能块各列表:c)测试分析Server1.端口监听和连接过程总结:需求分析方面:如今这个网络时代,在这个信息爆炸的时代,网络聊天工具已成为是人与人交流必须的工具了,虽然已有多种网络聊天工具,但并不一定都满足我们的需求,每个产品都有他们各自的理念,我们只有做也自己的特色,为大众所接受,才能算是完成一款好的聊天软件。
另,我把服务器在阿里云挂载成功,可实现外网通信的试验。
数据结构我在服务端和客户端都采用了多线程来对实时通信处理,在管理线程方面用了静态哈希表,使服务端很好地去接收各个客户端发来的各种信息,并实现转发功能。
客户端方面也采用哈希表来保存多个聊天窗口,很好地实现一对多聊天的功能。
在好友列表上的消息提醒功能,我采用了栈的机制,对每个消息进行了入栈操作,当点击获取消息时,进行对消息的出栈,点击一次,进行一次出栈,直到栈为空。
遇到的问题1、线程的处理对多线程操作时,忘了每个客户端退出登陆后关闭线程,使该线程一直运行,当客户端再次登陆后,再次开启新的线程,使HashMap中线程重复,造成消息无法发送或接收等问题,且不及时关闭线程是个不安全的现象。
2、序列化的对象流的处理在线程中的循环中重复对同一个输出流进行实例化,造成输出错误的IO异常。
3、项目中common包中的所有类由于前期大家讨论得不够严谨,造成在这个包中进行了大量修改,特别是构建好友列表时,在common包中的Userdata中应该包含什么资料,进行了反复修改。
4.与数据库接洽的问题前期对数据库知识不了解,造成了对队友很多重复的修改,后来自学了基本的数据库知识,进行了很好地进行了资料的储存。
5.把服务器挂载在外网实现了局域网聊天后,目标想把它实现到外网也可以使用,一开始在淘宝卖家上获得了一个测试服务器,把服务端打包成Jar后,放上去,用获得的公网IP测试,连不上,查找了相关资料,可能涉及了网关,nat,udp打洞等问题。
数据结构课程设计报告范文

数据结构课程设计报告课程设计报告课程设计题目:链表的创立、插入、删除、修改学生姓名专业计算机科学与技术班级学号指导教师艾9月 30日一、实验题目:实现链表的创立、插入、删除和修改任务:实现链表的创立、插入、删除、修改和输出要求:建立一个简单的人机对话,创立、插入、删除、修改和输出功能能够根据需要选择使用。
二、实验时间、地点:-12-26~ -12-30、信工楼302三、实验目的本次课程设计的主要目的是综合运用所学的数据结构知识解决一个比较实际问题,侧重对链表、数组、字符串、图、树等相关内容的综合应用,使同学们能进一步熟悉掌握数据结构的基础知识,进一步提升自己的解决问题和编程调试能力,为后续专业课程的学习打下良好的基础。
四、实验要求1. 了解数据结构及其分类、数据结构与算法的密切关系;2. 熟悉各种基本数据结构及其操作,学会根据实际问题来选择数据结构;3. 掌握设计算法的步骤和分析方法;4. 掌握数据结构在排序和查找等常见算法中的应用。
5. 独立完成;6.每个人需按照选题规则确定好自己的题目(注意不是多人完成一题,每人独立完成一题),不得以任何理由选择其它的题目,当然在完成自己的题目之后根据个人兴趣能够继续选做其它的题目;7.课程设计完成后严格按照报告格式撰写课程设计报告,并于结束后的第三天上交到学习委员统一交给老师;8.课程设计的成绩由两部分组成:程序检查成绩(40%,每个功能占程序分的20%)+报告检查成绩(40%)+平时考核(20%)五、实现思路链表是一种动态数据结构,她的特点是用一组任意的存储单元(能够是连续的,也能够是不连续的)存放数据元素。
链表中每一个元素成为“结点”,每一个结点都是由数据域和指针域组成的,每个结点中的指针域指向下一个结点。
Head是“头指针”,表示链表的开始,用来指向第一个结点,而最后一个指针的指针域为NULL(空地址),表示链表的结束。
能够看出链表结构必须利用指针才能实现,即一个结点中必须包含一个指针变量,用来存放下一个结点的地址。
数据结构课程设计实验报告完整版

数据结构课程设计实验报告完整版【正文】一、实验目的本实验主要目的是通过实践,掌握数据结构的基本概念、常见数据结构的实现方式以及在实际应用中的应用场景和效果。
二、实验背景数据结构是计算机科学与技术领域中的一个重要概念,是研究数据的组织方式、存储方式、访问方式以及操作等方面的方法论。
在计算机科学领域,数据结构是实现算法和解决问题的基础,因此对数据结构的理解和应用具有重要意义。
三、实验内容本次数据结构课程设计实验主要分为以下几个部分:1. 实验环境的准备:包括选择合适的开发平台、安装必要的软件和工具。
2. 实验数据的收集和处理:通过合适的方式收集实验所需的数据,并对数据进行处理和整理。
3. 数据结构的选择和实现:根据实验需求,选择合适的数据结构,并进行相应的数据结构实现。
4. 数据结构的测试和优化:对所实现的数据结构进行测试,包括性能测试和功能测试,并根据测试结果对数据结构进行优化和改进。
5. 实验报告的撰写:根据实验过程和结果,撰写完整的实验报告,包括实验目的、实验背景、实验内容、实验结果和结论等。
四、实验过程1. 实验环境的准备本实验选择了Visual Studio作为开发平台,安装了相应版本的Visual Studio,并根据官方指引进行了相应的配置和设置。
2. 实验数据的收集和处理本实验选取了一份包含学生信息的数据集,包括学生姓名、学号、性别、年龄等信息。
通过编写Python脚本,成功提取了所需信息,并对数据进行了清洗和整理。
3. 数据结构的选择和实现根据实验需求,我们选择了链表作为数据结构的实现方式。
链表是一种常见的动态数据结构,能够高效地插入和删除元素,适用于频繁插入和删除的场景。
在实现链表时,我们定义了一个节点结构,包含数据域和指针域。
通过指针的方式将节点连接起来,形成一个链式结构。
同时,我们还实现了相关的操作函数,包括插入、删除、查找等操作。
4. 数据结构的测试和优化在完成链表的实现后,我们对其进行了性能测试和功能测试。
数据结构总实验报告

华南农业大学信息学院课程设计实验学院信息班级13软工4学号姓名实验题目餐厅点餐系统■设计性□综合性自我评价教师评语能够实现实验要求的功能□全部□部分算法有新意□有□一般程序运行通过□全部□部分算法注释说明□完善□仅有功能说明接口参数说明□有□无按期上交文档资料及源程序□所有□部分独立完成实验□能□不能体现团队合作精神。
□能够□不能成绩一、题目要求题目描述:该程序由餐厅工作人员使用,因为是餐厅点餐系统,因此需要菜单,菜单由链表实现。
客人提供姓名,电话,桌子号,所点食物等信息,工作人员通过这些信息创建订单,订单用链表来管理,工作人员能对订单进行添加,修改,删除等操作。
项目结构(具体内容见源代码和个人报告):项目OrderSystem中所有的包和类如图1-1:项目:OrderSystemPackage list:存放链表数据结构类接口MyList—>抽象类MyAbstractList—>我的链表MyLinkedListPackage util:存放图形用户界面相关的类和食物订单等类图形界面类(只列出主要的):AddPanel:添加订单的面板AllIndentPanel:用于显示所有的订单(对订单除添加外的所有操作都在该面板中进行)具体应用的类:Food:食物类Indent:订单类,(封装一个Food类的链表)AllFoodList:从文件中读出所有的食物存到链表中AllIndentList:存放所有的订单(一个Indent类型的链表)图1-1二、解题思路(1)首先确定使用链表的数据结构(2)设计具体的类和相关操作(3)设计图形化用户界面组员:林锦新李小辉林景富分工合作:林锦新:负责数据结构(链表)和文件操作李小辉:负责该程序中图形化的代码编写林景富:利用实现好的数据结构,编写具体的类和相关操作三、调试分析1.数据测试硬盘中的菜名.txt对应内容如图1.图1.通过IndentManager读取该文件后显示在界面的效果图如图2图2.接着进行几次增加订单操作,完成后鲜果图如图3.图3.接着按查看/修改按钮查看0001号订单的详细信息如图4图4.接着删除0001,0003,0006,0008号订单,删除后效果如图5图5.接着修改订单编号为0002的客户姓名为哈哈哈,电话号码为0000000000,修改后鲜果如图6.图6.接着讲所有的订单设置为已付款,操作后效果如图7.图7.接着关闭程序,选择保存订单。
数据结构课程设计报告

《数据结构》课程设计报告姓名:潘庆专业:计算机科学与技术班级: J1401学号: 4141110020指导老师:王新宇2016年1月15日目录一、需求分析 (2)二、设计说明 (3)1. 算法设计的思想 (3)2. 主要的数据结构设计说明 (4)3. 程序的主要流程图 (5)4. 程序的主要模块 (6)5. 程序的主要函数及其伪代码说明 (6)三、上机结果及体会 (13)1.实际完成情况说明 (13)2.程序运行结果及图示 (13)3.问题及解决方案 (16)4.收获及体会 (16)附录(源程序) (17)一、需求分析1. 程序所实现的功能:七种排序算法的演示:(1)直接插入排序;(2)冒泡排序;(3)选择排序;(4)快速排序;(5)归并排序;(6)堆排序;(7)基数排序。
要求:(1)设计一个人机交互界面;(2)给出从初始开始时每一趟排序的结果。
2. 程序的输入:用户开始时自行输入排序个数和具体数字(须为整数)void input_int(SqList &L){int i;printf("请输入排序个数:");scanf("%d",&L.length);printf("请输入%d个整数:",L.length);for(i=1;i<=L.length;i++)scanf("%d",&L.r[i].key);}3. 程序的输出:用户选择具体排序方法后,程序将每一趟排序的输出结果一次性输出,最后一趟即为最终排序结果void output_int(SqList L){int i;for(i=1;i<=L.length;i++)printf("%d ",L.r[i].key);}4. 测试数据:12 2 16 30 8 28 4 10 20 6 18二、设计说明1. 算法设计的思想(1). 插入排序基本思路:向有序表中插入新的元素(或记录),使之仍有序,此时表的长度也相应地发生变化。
数据结构实验报告

华南农业大学信息学院综合性、设计性实验起止日期:2011秋学院软件学院专业班级10软件工程7班学号201031000704姓名黄定康实验题目实现平衡二叉排序树的各种算法自我评价项目算法设计独立完成情况算法熟练程度测试通过成功失败独立帮助掌握了解不懂插入新结点√√√√前序、中序、后序遍历二叉树(递归)√√√√前序、中序、后序遍历的非递归算法√√√√层次遍历二叉树√√√√在二叉树中查找给定关键字√√√√交换各结点的左右子树√√√√求二叉树的深度√√√√叶子结点数√√√√删除某结点√√√√●A---------完成实验要求的全部功能并运行通过,算法有一定的新意,程序代码符合书写规范,实验报告叙述清晰完整,有详尽的分析和总结。
●B---------完成实验要求的全部功能,程序代码符合书写规范,实验报告叙述清晰完整。
●C---------完成实验要求的大部分功能,实验报告良好。
●D---------未按时完成实验,或者抄袭。
成绩教师签名:杨秋妹实验报告题目:实现平衡二叉排序树的各种算法班级:10软件工程7班姓名:黄定康学号:201031000704完成日期:2011/12/07(一)分析题目要求(1)函数说明void R_rotate(ptr& t) -右旋转函数,从T开始做右旋转int coutdeep(ptr t)-计算深度函数void L_rotate(ptr& t)-左旋转函数void leftbalance(ptr&t)-左平衡函数,从T开始做左平衡处理void rightbalance(ptr&t)-右平衡函数int insertA VL(ptr& t,int e,int & taller)-插入结点函数void preorder(ptr t)-(递归)先序遍历void preorder_2(ptr t)-(非递归)先序遍历void inorder(ptr t)-(递归)中序遍历void inorder_2(ptr t)-(非递归)中序遍历void posorder(ptr t)-(递归)后序遍历void posorder_2(ptr t)-(非递归)后序遍历void dfs(ptr t,int type)-(递归)深度优先遍历(包含中序先序后续)void dfs_2(ptr t,int type)-(递归) 深度优先遍历int bfs(ptr t)-层次便利int delete_node(ptr& t,int&shorter,int temp);-删除结点函数int Delete(ptr& t,int shorter)-删除结点函数int transfer(ptr&t)-左右子树交换函数int countleaf(ptr t)-计算叶节点int checkup(ptr t,int temp)- 从树t中查找temp是否存在,存在返回1否则返回0int main()-主函数void show_menu(ptr t)-简单的菜单函数(2)输入形式及输入值范围输入形式:当树没创建时,先在第一行输入树的节点数目n,第二行再输入n个大于0的不重复整数,以空格隔开。
《数据结构》课程设计

《数据结构》课程设计一、课程目标《数据结构》课程旨在帮助学生掌握计算机科学中基础的数据组织、管理和处理方法,培养其运用数据结构解决实际问题的能力。
课程目标如下:1. 知识目标:(1)理解基本数据结构的概念、原理和应用,如线性表、栈、队列、树、图等;(2)掌握常见算法的设计和分析方法,如排序、查找、递归、贪心、分治等;(3)了解数据结构在实际应用中的使用,如操作系统、数据库、编译器等。
2. 技能目标:(1)能够运用所学数据结构解决实际问题,具备良好的编程实践能力;(2)掌握算法分析方法,能够评价算法优劣,进行算法优化;(3)能够运用数据结构进行问题建模,提高问题解决效率。
3. 情感态度价值观目标:(1)激发学生对计算机科学的兴趣,培养其探索精神和创新意识;(2)培养学生团队合作意识,学会与他人共同解决问题;(3)增强学生的责任感和使命感,使其认识到数据结构在信息技术发展中的重要性。
本课程针对高中年级学生,结合学科特点和教学要求,将目标分解为具体的学习成果,为后续教学设计和评估提供依据。
课程注重理论与实践相结合,旨在提高学生的知识水平、技能素养和情感态度价值观。
二、教学内容《数据结构》教学内容依据课程目标进行选择和组织,确保科学性和系统性。
主要包括以下部分:1. 线性表:- 线性表的定义、特点和基本操作;- 顺序存储结构、链式存储结构及其应用;- 线性表的相关算法,如插入、删除、查找等。
2. 栈和队列:- 栈和队列的定义、特点及基本操作;- 栈和队列的存储结构及其应用;- 栈和队列相关算法,如进制转换、括号匹配等。
3. 树和二叉树:- 树的定义、基本术语和性质;- 二叉树的定义、性质、存储结构及遍历算法;- 线索二叉树、哈夫曼树及其应用。
4. 图:- 图的定义、基本术语和存储结构;- 图的遍历算法,如深度优先搜索、广度优先搜索;- 最短路径、最小生成树等算法。
5. 排序和查找:- 常见排序算法,如冒泡、选择、插入、快速等;- 常见查找算法,如顺序、二分、哈希等。
《数据结构》课程设计报告

《数据结构》课程设计报告一、课程目标《数据结构》课程旨在帮助学生掌握计算机科学中数据结构的基本概念、原理及实现方法,培养其运用数据结构解决实际问题的能力。
本课程目标如下: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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华南农业大学信息学院设计性、综合性实验教师签名:______实验四上机实习报告专业班级:___________ 学号:_________ 姓名:______ 完成日期:_______ (1)问题的描述:用函数实现如下二叉排序树算法:(1)插入新结点(2)前序、中序、后序遍历二叉树(3)中序遍历的非递归算法(4)层次遍历二叉树(5)在二叉树中查找给定关键字(函数返回值为成功1,失败0)Input第一行:准备建树的结点个数n第二行:输入n个整数,用空格分隔第三行:输入待查找的关键字第四行:输入待查找的关键字第五行:输入待插入的关键字Output第一行:二叉树的先序遍历序列第二行:二叉树的中序遍历序列第三行:二叉树的后序遍历序列第四行:查找结果第五行:查找结果第六行~第八行:插入新结点后的二叉树的先、中、序遍历序列第九行:插入新结点后的二叉树的中序遍历序列(非递归算法)第十行:插入新结点后的二叉树的层次遍历序列(2)数据结构的设计:为了方便移动使用链表来存储二叉树,因此设计如下数据类型表示二叉树:typedef struct BiTNode //生成树的结构体{ElemType key; //存储数据struct BiTNode *left,*right; //左、右孩子指针}BiTNode,*BiTree;int main() //主函数{BiTree T;ElemType search1,search2,insert;T=CreateBiTree(); //建立二叉树scanf("%d %d %d",&search1,&search2,&insert);PreOrderTraverse(T); //先序遍历printf("\n");InOrderTraverse(T); //中序遍历printf("\n");PostOrderTraverse(T); //后序遍历printf("\n");if(searchBiT(T,search1)==NULL)//查找函数printf("0\n");elseprintf("1\n"); //对第一个关键字进行查找if(searchBiT(T,search2)==NULL)printf("0\n");elseprintf("1\n"); //对第二个关键字进行查找T=InsertBiT(T,insert); //插入一个新结点PreOrderTraverse(T); //对插入后的新树进行先序遍历printf("\n");InOrderTraverse(T); //对插入后的新树进行中序遍历printf("\n");PostOrderTraverse(T); //对插入后的新树进行后序遍历printf("\n");InOrderTraverseII(T); //对插入后的新树进行中序遍历(非递归算法)printf("\n");LevelOrderTraverse(T); //对插入后的新树进行层次遍历return 0;}(3)函数功能、参数说明及概要设计:1、CreateBiTree();//创建二叉树函数,返回成功与否。
//根据二叉排序树的特点,找出新结点在树中对应的位置,再插入树中。
2、PreOrderTraverse(T);//用递归方式,前序遍历。
3、InOrderTraverse(T); //用递归方式,中序遍历。
4、PostOrderTraverse(T);//用递归方式,后序遍历。
5、InOrderTraverseII(T);//利用栈,用非递归方式,返回成功与否。
//先扫描(非访问)根节点到所有左节点并将它们一一入栈,当无左节点时表示栈顶节点无左子树,然后取出这个节点,并访问它,将P指向刚出栈的节点到右孩子对右孩子进行同样的处理。
6、searchBiT(T,search1);//查找函数,递归算法,返回成功与否。
//利用中序遍历二叉树T,依次比较每个结点的关键字。
7、InsertBiT(T,insert);//插入函数,返回成功与否。
8、LevelOrderTraverse(T);//利用队列,层次遍历,返回成功与否。
//将根节点入队,循环执行,出队,访问该节点,若该节点的左子节点不为空则将该节点的左子节点入队,若该节点的右子节点不为空,则该节点的右子节点入队;直到队列为空。
(4)具体程序的实现#include<stdio.h>#include<malloc.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define STACK_INIT_SIZE 100 // 存储空间初始分配量#define STACKINCREMENT 10 // 存储空间分配增量typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等typedef int ElemType; //定义元素类型typedef struct BiTNode //生成树的结构体{ElemType key;struct BiTNode *left,*right;//左右孩子指针}BiTNode,*BiTree;BiTree InsertBiT(BiTree T,ElemType key){ //向树中写入数据,插入数据元素keyBiTree f,p=T;while(p){if(p->key==key) return NULL;f=p;p=(key<p->key)?p->left:p->right;}p=(BiTree)malloc(sizeof(BiTNode));p->key=key;p->left=p->right=NULL;if(T==NULL)T=p;elseif(key<f->key)f->left=p;elsef->right=p;return T;}BiTree CreateBiTree(){ //生成二叉树BiTree T=NULL;ElemType key;int n,i;scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&key);T=InsertBiT(T,key); //向树中插入数据}return T;}void PreOrderTraverse(BiTree root){BiTree p=root; //先序遍历,递归算法if(p!=NULL){printf("%d ",p->key);PreOrderTraverse(p->left);PreOrderTraverse(p->right);}}void InOrderTraverse(BiTree root){ //中序遍历,递归算法BiTree p=root;if(p!=NULL){InOrderTraverse(p->left );printf("%d ",p->key );InOrderTraverse(p->right );}}void PostOrderTraverse(BiTree root){ //后序遍历,递归算法BiTree p=root;if(p!=NULL){PostOrderTraverse(p->left );PostOrderTraverse(p->right );printf("%d ",p->key );}}Status visit(BiTree p) //输出结点的值{printf("%d ",p->key);return OK;}typedef BiTree SElemType;//预定义struct SqStack //建立栈的结构体{SElemType *base; // 在栈构造之前和销毁之后,base的值为NULLSElemType *top; // 栈顶指针int stacksize; // 当前已分配的存储空间,以元素为单位};Status InitStack(SqStack &S){ //构造一个空栈SS.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!S.base) return ERROR;S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;}Status Push(SqStack &S,SElemType e){ //插入元素e为新的栈顶元素if(S.top - S.base >= S.stacksize ){S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!S.base)return ERROR;S.top = S.base + S.stacksize ;S.stacksize = S.stacksize + STACKINCREMENT;}*S.top ++=e;return OK;}Status Pop(SqStack &S,SElemType &e){ //弹出栈S的栈顶元素if(S.top ==S.base )return ERROR;e=*--S.top ;return OK;}Status StackEmpty(SqStack &S){ //判断S是否是空栈,并返回值if(S.base==S.top)return TRUE;elsereturn FALSE;}Status InOrderTraverseII(BiTree T){ //二叉树的中序遍历算法(非递归算法)SqStack S; //利用栈来暂时存储结点,之后再弹出InitStack(S);BiTree p=T;while(p||!StackEmpty(S)){if(p){Push(S,p);p=p->left;}else{Pop(S,p);if(!visit(p))return ERROR;p=p->right;}}return OK;}BiTNode *searchBiT(BiTree t,ElemType key){ //对关键字进行查找,利用递归算法if(t==NULL||key==t->key)return t;if(key < t->key)return searchBiT(t->left,key);elsereturn searchBiT(t->right,key);}typedef BiTree QElemType ; //定义typedef struct QueueNode //队列的结构体{QElemType data;struct QueueNode *next;} QueueNode;typedef struct linkQueue{QueueNode * front; //队头指针,若队列不空,指向队列头元素QueueNode * rear; //队尾指针,若队列不空,指向队列尾元素的下一个位置}linkQueue;void InitQueue(linkQueue * q){q->front=q->rear =NULL; //构造一个空队列,无头结点}int QueueEmpty(linkQueue * Q) //判断队列是否为空队列{return (Q->front==NULL)&&(Q->rear==NULL);}void EnQueue(linkQueue *Q,QElemType x){ //向队列插入新的元素xQueueNode *p=(QueueNode *)malloc(sizeof(QueueNode));p->data=x;p->next=NULL;if(QueueEmpty(Q)) //无头结点的队列Q->front=Q->rear=p;else{Q->rear->next=p;Q->rear=p;}}QElemType DeQueue(linkQueue *Q){ //若队列不空,则删除Q的队头元素QElemType x;QueueNode *p;if(QueueEmpty(Q)){printf("Queue Empty!");return ERROR;}p=Q->front;x=p->data;Q->front=p->next;if(Q->rear==p)Q->rear=NULL;free(p);return x; //返回删除的值x}void LevelOrderTraverse(BiTree root){ //二叉树的层次遍历BiTree p;linkQueue * q; //利用队列q=(linkQueue *)malloc(sizeof(linkQueue));InitQueue(q);p=root;if(p!=NULL){EnQueue(q,p);while(!QueueEmpty(q)){p=DeQueue(q);visit(p);if(p->left!=NULL)EnQueue(q,p->left);if(p->right!=NULL)EnQueue(q,p->right);}}}int main(){BiTree T;ElemType search1,search2,insert;T=CreateBiTree(); //建立二叉树scanf("%d %d %d",&search1,&search2,&insert);PreOrderTraverse(T); //先序遍历printf("\n");InOrderTraverse(T); //中序遍历printf("\n");PostOrderTraverse(T); //后序遍历printf("\n");if(searchBiT(T,search1)==NULL)printf("0\n");elseprintf("1\n"); //对第一个关键字进行查找if(searchBiT(T,search2)==NULL)printf("0\n");elseprintf("1\n"); //对第二个关键字进行查找T=InsertBiT(T,insert); //插入一个新结点PreOrderTraverse(T); //对插入后的新树进行先序遍历printf("\n");InOrderTraverse(T); //对插入后的新树进行中序遍历printf("\n");PostOrderTraverse(T); //对插入后的新树进行后序遍历printf("\n");InOrderTraverseII(T); //对插入后的新树进行中序遍历(非递归算法)printf("\n");LevelOrderTraverse(T); //对插入后的新树进行层次遍历return 0;}(5)主界面设计及程序使用规范1、输入要创建二叉树的节点总数N2、输入N个节点数的关键字(整型)以空格区分3、输入要查找的关键字(整型)4、输入要查找的关键字(整型)5、输入要插入到关键字(整型)(6)调试情况1. 可能出现的特殊情况由于没有平衡调节机制,所以当输入数据为高度单调性时,不能体现出二叉排序树的优越性,不过采用了链表存储数据,所以在最坏情况下,也不会造成存储空间的浪费。