数据结构课程设计报告(仓库管理系统、通讯录管理系统、猴子选大王、二叉树叶子结点链成单链表)
- 格式:doc
- 大小:758.50 KB
- 文档页数:32
(仓库管理)数据结构课程设计报告有代码语言仓库管理系统第一章系统目标(三号楷体加粗)仓库管理应用程序系统可以实现信息多次追加入录、信息显示、删除信息、修改信息、查询信息、价格升序等基本功能,这些功能模块都用函数的形式来实现。
学生信息保存在文件中,需要时可以随时从文件中读取出来。
方便用户随时可查询。
进行仓库管理。
第二章系统分析(三号楷体加粗)正文(四号楷体)明确用户的需求,如操作界面需求,系统功能需求,数据的具体流程等。
开始运行时界面如下:你可以根据所对应的信息提示进行操作便可对其进行数据的记录与查询。
第三章系统设计正文(四号楷体)给出具体的实现环境(如用什么语言?在什么操作系统?)用C语言编程,用cokeblock编译器,在windowsxp操作系统下编译成功。
给出主函数和每个算法的实现代码。
#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<ctype.h>#include<string.h>#defineSIZE100typedefstruct{charname[10];charfam[10];intpay;intnum;}Store;typedefstructnode{Storeelem;structnode*next;}In;In*head=NULL;voidappendInfo();voidList();voidmenu(void);In*Init();voidStart();voidInsert();voidDel();voidrenew();voidWsave();voidRead();voidSortUp();voidPreFile();intmain(){charselect;PreFile();menu();while((select=toupper(getch()))!='0'){ system("cls");switch(select){case'1':{Start();system("pause");menu(); break;}case'2':{appendInfo();system("pause");menu(); break;}case'3':{Insert();system("pause");menu(); break;}case'4':{Del();system("pause");menu(); break;}case'5':{renew();system("pause");menu(); break;}case'6':{List();system("pause");menu(); break;}case'7':{SortUp();system("pause");menu(); break;}case'W':{Wsave();system("pause");menu();break;}case'R':{Read();system("pause");menu();break;}default:printf("Inputerror!\n"); system("pause");menu();}}return0;}In*Init(){In*L;L=(In*)malloc(sizeof(In));L->next=NULL;returnL;}voidappendInfo(){inti,j;In*p,*s;A1:printf("请输入要存放的记录数:"); scanf("%d",&j);if(j<=0){printf("Inputerror!\n");gotoA1;}if(head==NULL){p=Init();}else{p=head->next;while(p->next!=NULL)p=p->next;}for(i=0;i<j;i++){s=Init();printf("名称品牌单价数量\n"); scanf("%s",&s->);scanf("%s",&s->);scanf("%d",&s->);scanf("%d",&s->);p->next=s;p=s;}}voidList(){In*p;if(head==NULL){printf("Noneofinformationaboutproducts.\n"); return;}elsep=head->next;printf("名称品牌单价数量\n");while(p!=NULL){printf("%s\t%s\t%d\t%d\n",p->,p->,p->,p->);p=p->next;}}voidmenu(){system("cls");printf("|-------------------------------------------|\n"); printf("|---------------家电仓库管理----------------|\n"); printf("|请输入选项编号|\n");printf("|-------------------------------------------|\n"); printf("|1--数据初始化|\n");printf("|2--创建数据表|\n");printf("|3--数据插入|\n");printf("|4--数据删除|\n");printf("|5--数据更新|\n");printf("|6--数据查询|\n");printf("|7--单价升序|\n");printf("|w--数据保存|\n");printf("|r--数据读出|\n");printf("|0--系统退出(exit)|\n");printf("|-------------------------------------------|\n"); printf("请输入你的选择:");}voidStart(){char;printf("你想清空所有资料吗?(Y/N):");fflush(stdin);=getchar();if(=='Y'||=='y'){printf("已经初始化了、、、\n");head=NULL;return;}elseprintf("资料仍在、、、\n");return;}voidInsert(){In*pi,*p;charstr[10];printf("请问要在哪个学生后面插入(输入姓名):"); fflush(stdin);gets(str);pi=Init();printf("名称品牌单价数量\n");scanf("%s",&pi->);scanf("%s",&pi->);scanf("%d",&pi->);scanf("%d",&pi->);if(head==NULL){printf("前面没有数据,默认接在表头。
第一章链表的应用线性表是数据结构中最简单、最常用的一种线性结构,也是学习数据结构全部内容的基础,其掌握的好坏直接影响着后继课程的学习。
线性表的顺序存储结构,即顺序表的概念相对比较简单,因此,本章的主要任务是使用有关单链表的操作来实现通讯录信息系统的管理。
1.1设计要求本章的设计实验要求使用有关链表的操作来实现通讯录信息系统的管理。
为了验证算法,通讯录管理包括单通讯录链表的建立、通讯者的插入、通讯者的删除、通讯者的查询及通讯录表的输出等。
主控菜单的设计要求使用数字0—5来选择菜单项,其他输入则不起作用。
程序运行后,给出6个菜单项的内容和输入提示:1.通讯录链表的建立2. 通讯者结点的插入3. 通讯者结点的查询4. 通讯者结点的删除5. 通讯录链表的输出0. 退出管理系统请选择0—5:1.2设计分析1.2.1主控菜单函数设计分析1.实现循环和功能选择首先编写一个主控菜单驱动程序,输入0—5以进入相应选择项。
假设输入选择用变量sn存储,它作为menu_select函数的返回值给switch语句。
使用for循环实现重复选择,并在主函数main()中实现。
实际使用时,只有选择大于5或小于0的值,程序才能结束运行,这就要使用循环控制。
这里使用for循环语句实现菜单的循环选择,为了结束程序的运行,使用了“return”语句,也可以使用“exit(0);”语句。
2.得到sn的合理值如前所述,应该设计一个函数用来输出提示信息和处理输入,这个函数应该返回一个数值sn,以便供给switch语句使用。
假设函数名为menu_select,对于sn的输入值,在switch 中case语句对应数字1—5,对于不符合要求的输入,提示输入错误并要求重新输入。
将该函数与主函数合在一起,编译运行程序,即可检查并验证菜单选择是否正确。
1.2.2功能函数设计分析1.建立通讯录链表的设计这里实际上是要求建立一个带头结点的单链表。
建立单链表有两种方法,一种称之为头插法,另一种称为尾插法。
数据结构课程设计(5篇)第一篇:数据结构课程设计课程设计说明书设计名称:数据结构课程设计题目:设计五:二叉树的相关操作学生姓名:专业:计算机科学与技术班级:学号:指导教师:日期: 2012 年 3 月 5 日课程设计任务书计算机科学与技术专业年级班一、设计题目设计五二叉树的相关操作二、主要内容建立二叉树,并对树进行相关操作。
三、具体要求1)利用完全二叉树的性质建立一棵二叉树。
(层数不小于4层)2)统计树叶子结点的个数。
3)求二叉树的深度。
4)能够输出用前序,中序,后序对二叉树进行遍历的遍历序列。
四、进度安排依照教学计划,课程设计时间为:2周。
本设计要求按照软件工程的基本过程完成设计。
建议将时间分为三个阶段:第一阶段,根据题目要求,确定系统的总体设计方案:即系统包括哪些功能模块,每个模块的实现算法,并画出相应的流程图.同时编写相应的设计文档;第二阶段,根据流程图编写程序代码并调试,再将调试通过的各个子模块进行集成调试;第三阶段,归纳文档资料,按要求填写在《课程设计说明书》上,并参加答辩。
三个阶段时间分配的大概比例是:35: 45: 20。
五、完成后应上交的材料本课程设计要求按照学校有关规范的要求完成,在课程设计完成后需要提交的成果和有关文档资料包括课程设计的说明书,课程设计有关源程序及可运行程序(含运行环境)。
其中课程设计说明书的格式按学校规范(见附件),其内容不能过于简单,必须包括的内容有:1、课程设计的基本思想,系统的总功能和各子模块的功能说明;2、课程设计有关算法的描述,并画出有关算法流程图;3、源程序中核心代码的说明。
4、本课程设计的个人总结,主要包括以下内容:(1)课程设计中遇到的主要问题和解决方法;(2)你的创新和得意之处;(3)设计中存在的不足及改进的设想;(4)本次课程设计的感想和心得体会。
5、源代码要求在关键的位置有注释,增加程序的可读性。
程序结构和变量等命名必须符合有关软件开发的技术规范(参见有关文献)。
数据结构课程设计报告总结一、背景与目的数据结构是计算机科学中的一门核心课程,它涉及到如何有效地组织、存储和处理数据。
本次课程设计的目的是通过实际项目,加深对数据结构基本概念和原理的理解,提高解决实际问题的能力。
二、项目内容与实现本次课程设计,我们选择了“学生信息管理系统”作为项目主题。
该系统需要存储和管理学生信息,包括学号、姓名、年龄、成绩等。
为了满足这些需求,我们采用了多种数据结构,如数组、链表、栈、队列和二叉搜索树等。
在实现过程中,我们首先定义了学生类,包含各种属性。
然后,我们使用数组来存储学生信息。
为了方便查找,我们采用二叉搜索树对学生信息进行排序。
此外,我们还实现了添加、删除、查找和修改学生信息的功能。
三、遇到的问题与解决方案在实现过程中,我们遇到了以下几个问题:1. 如何在O(log n)的时间内查找学生信息?解决方案:我们采用了二叉搜索树来存储学生信息,从而实现了在O(log n)的时间内查找学生信息。
2. 如何有效地实现对学生信息的批量修改?解决方案:我们采用链表作为底层数据结构,对学生信息进行动态管理。
当我们需要修改大量学生信息时,只需遍历链表,修改对应节点的值即可。
3. 如何处理大量数据的存储和查询?解决方案:我们采用数据库作为存储系统,将学生信息存储在数据库中。
通过编写SQL语句,我们可以方便地对学生信息进行查询和修改。
四、总结与展望通过本次课程设计,我们不仅加深了对数据结构基本概念和原理的理解,还提高了解决实际问题的能力。
在实现过程中,我们学会了如何将理论知识应用到实际项目中,也意识到了数据结构在软件开发中的重要性。
展望未来,我们将继续深入学习数据结构相关知识,努力提高自己的编程能力和算法水平。
同时,我们也希望能够将所学的数据结构知识应用到更多的实际项目中,为软件开发做出更大的贡献。
库存物品信息管理1、设计目的:利用《数据结构》课程的相关知识完成一个具有一定难度的综合设计题目,利用C/C++语言进行程序设计,并规范地完成课程设计报告.通过课程设计,巩固和加深对线性表、栈、队列、字符串、树、图、查找、排序等理论知识的理解;掌握现实复杂问题的分析建模和解决方法(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提高利用计算机分析解决综合性实际问题的基本能力。
2、设计内容和要求:①、要求物品出库、入库信息管理,浏览、修改物品信息;②、物品信息按名称和代码存放,在程序出错时自动返回主页面③、可以按物品名称物品代码来查询物品信息,即在主菜单中增加查询功能选项,输入代码或名称即可显示;④、可以修改、删除某库存物品信息。
二、运行环境(软、硬件环境)软件环境:Vc6.0编程软件运行平台: Win32硬件: 普通个人PC机三、算法设计的思想1、输入物品信息函数:Add(Link l)基本思想: 根据物品代码(code)来输入物品信息,如果代码已存在,则按ENTER键返回主页面;如果代码不存在,则继续输入物品名称、物品数量、物品等级;若继续输入,就直接输入代码等信息,若返回上一级,就按“0”键,调用main(),返回主界面。
2、物品出库函数:Del(Link l)基本思想:根据输入的代码或名称,如果不存在该物品,就输出“不存在该物品”;然后输出是用代码出库或者名称出库,在选择操作后,输出该物品对应的信息,若输入“0”,则调用main(),返回主界面。
3、查看库存物品信息函数 :Qur(Link l)基本思想:根据输入的信息判断有无该商品信息,如果没有该信息,则输出“你输入的信息有误",有该物品,则输出该物品对饮的代码、名称、数量等信息,按enter键返回主界面.4、删除物品信息函数:Del(Link l)基本思想:根据用户键入的选择,如果没有该物品信息,则输出没有改物品;调用该函数Del(Link l),如果存在该物品,则输出该物品及信息已成功修改,然后用户键入任意键返回主界面。
《数据结构》课程设计一、课程目标《数据结构》课程旨在帮助学生掌握计算机科学中基础的数据组织、管理和处理方法,培养其运用数据结构解决实际问题的能力。
课程目标如下:1. 知识目标:(1)理解基本数据结构的概念、原理和应用,如线性表、栈、队列、树、图等;(2)掌握常见算法的设计和分析方法,如排序、查找、递归、贪心、分治等;(3)了解数据结构在实际应用中的使用,如操作系统、数据库、编译器等。
2. 技能目标:(1)能够运用所学数据结构解决实际问题,具备良好的编程实践能力;(2)掌握算法分析方法,能够评价算法优劣,进行算法优化;(3)能够运用数据结构进行问题建模,提高问题解决效率。
3. 情感态度价值观目标:(1)激发学生对计算机科学的兴趣,培养其探索精神和创新意识;(2)培养学生团队合作意识,学会与他人共同解决问题;(3)增强学生的责任感和使命感,使其认识到数据结构在信息技术发展中的重要性。
本课程针对高中年级学生,结合学科特点和教学要求,将目标分解为具体的学习成果,为后续教学设计和评估提供依据。
课程注重理论与实践相结合,旨在提高学生的知识水平、技能素养和情感态度价值观。
二、教学内容《数据结构》教学内容依据课程目标进行选择和组织,确保科学性和系统性。
主要包括以下部分:1. 线性表:- 线性表的定义、特点和基本操作;- 顺序存储结构、链式存储结构及其应用;- 线性表的相关算法,如插入、删除、查找等。
2. 栈和队列:- 栈和队列的定义、特点及基本操作;- 栈和队列的存储结构及其应用;- 栈和队列相关算法,如进制转换、括号匹配等。
3. 树和二叉树:- 树的定义、基本术语和性质;- 二叉树的定义、性质、存储结构及遍历算法;- 线索二叉树、哈夫曼树及其应用。
4. 图:- 图的定义、基本术语和存储结构;- 图的遍历算法,如深度优先搜索、广度优先搜索;- 最短路径、最小生成树等算法。
5. 排序和查找:- 常见排序算法,如冒泡、选择、插入、快速等;- 常见查找算法,如顺序、二分、哈希等。
数学与计算机科学学院数据结构程序设计报告平衡二叉树学生姓名:学号:班级:指导老师:报告日期:1.题目与要求1). 问题的提出编写已个平衡二叉树,主要是对插入一个元素导致树不平衡的情况进行平衡化处理以及相关的处理。
2)设计的知识点队列的插入,删除,二叉树的建立于销毁,平衡树的平衡化,以及C语言中基础应用于结构等。
3)功能要求(1).通过不断插入的方式创建一棵平衡二叉树,包括输入结点的关键字和相关信息。
(2)按要求输出创建的平衡二叉树结点,包括顺序(中序)输出和按层次输出。
(3)插入新增的结点,若结点不存在则插入平衡二叉树,并进行相关调整。
(4)销毁二叉树。
(5)退出菜单界面如下:2.功能设计算法设计选择创建平衡二叉树后,利用循环不断插入结点,并进行调整,当输入节点为0时停止进入菜单界面。
在平横二叉树排序树BSTree上插入一个新的数据元素e的递归算法可如下描述:(1)若BSTree为空树,则插入一个数据元素为e的新结点作为BSTree的根结点,树的深度增1;(2)若e的关键字和BSTree的根节点的关键字相等,则不进行插入;(3)若e的关键字小于BSTree的根结点的关键字,而且在其左子树中不存在和e形同的关键字的结点,则将e插入在其左子树上,并且当插入之后的左子树的深度加1时,分别就下列不同情况处理之:a.BSTree的跟结点的平衡因子为-1(右子树的深度大于左子树的深度):则将跟结点的平衡因子更改为0,BBST的深度不变;b.BBST的根结点的平衡因子为0(左,右子树的深度相等):则将根结点的平衡因子更改为1,BBST的深度增1;c.BBST的根结点的平衡因子为1(左子树的深度大于右子树的深度):若BBST的左子树根结点的平衡因子为1,则需进行向左旋平衡处理,并且在右旋之后,将根节点和其右子树根节点的平衡因子更改为0,树的深度不变;若BBST的左子树根结点的平衡因子为-1,则需进行向左,向右的双向旋转平衡处理,并且在旋转处理之后,修改根结点和其左右子树的平衡因子,数的深度不变;(4)若e的关键字大于BBST的根结点的关键字,而且在BBST的右子树中不存在和e有相同的关键字的的节点,则将e插入在BBST的右子树上,并且当插入之后的右子树深度增加(+1)时,分别就不同情况处理之。
仓库管理系统1.问题描述建立一个仓库管理程序,可以按货物编号和货物名称查询仓库存储情况,也可以增加或删除货物。
2.功能需求要求完成以下功能:(1)创建仓库管理系统。
(2) 向仓库中存入货物,包括编号、货物名、数量。
(3) 查询某样货物的信息,可以选择按编号查询或按货物名称查询。
(4)从仓库中取出货物,包括该货物数量,可以选择按编号查询或按货物名称查询。
(5) 查询仓库中的所有货物,以表格形式列出,包括编号、货物名、数量。
(6) 退出该仓库管理系统3.实现要点(1)采用单链表建立仓库管理系统,即建立一个带有头结点的空链表。
(2)用户可以插入一条新的货物信息,向链表中插入一个新结点。
也可以添加仓库中已有的货物,修改该货物的结点的货物数量。
(3)用户查询货物信息,通过遍历单链表,找到与之匹配的货物编号或货物名称。
(4)用户可以删除货物信息,通过遍历单链表,找到与之匹配的货物编号或货物名称。
(5)用户可以查询仓库里的存货情况,通过遍历单链表,将每个结点的信息输出。
4.类定义为单链表建立类Link,其类定义如下:#include<iostream>using namespace std;typedef struct{char no[10];char name[30];int count;}DataType;struct Node{DataType data;Node *next;};class Link{public:Link(); //构造函数,建立单链表int Insert(); //插入节点,即添加货物Node * Search(); //查找某个节点void Delete(); //删除节点或更改节点的数据void show(); //遍历单链表,依次输出节点数据char Yn(); //输入(y/n)函数char * No(); //输入货物编号函数void Fprintf(); //将单链表数据写到文件中void Fscanf(); //读取文件中的数据private:Node *first,*real,*p,*q;};在Link类中,提供了如下成员函数:(1)函数声明Link();完成的功能建立一个带有头结点的空链表。
目录1 课程设计的目的和意义 (2)2 需求分析 (2)3数据库系统设计 (3)4.程序代码实现 ................... 错误!未定义书签。
5.系统用户界面设计 ............... 错误!未定义书签。
6 总结 ........................... 错误!未定义书签。
7.附录 ........................... 错误!未定义书签。
一、课程设计的目的和意义仓库在现实生活中用途十分广泛,各种商城、超市要利用仓库存放物资,药房、医院等要利用仓库存放药品,企业、工厂等要利用仓库存放原材料、生产成品,因此仓库的管理成了一项十分重要的工作。
人工管理仓库既费时又费力,而且容易造成混乱,严重时会影响商城、企业的正常运作,造成恶劣的后果。
随着信息技术的发展,办公自动化的普及,如何快速,高效,便捷的管理仓库受到了高度的关注。
本系统模拟仓库管理,系统主要针对于日常库存信息的管理,包括物资管理、仓库管理、入库操作、入库查询统计、出库操作、出库查询统计、库存查询统计等处理情况。
用户可以通过相应的模块,对仓库里的物品的基本情况和库存数量进行查询,管理员通过简单的操作即可轻松的管理仓库,查询各项相关信息,并能进行入库和出库操作等。
通过仓库管理系统的设计与实现,使我们巩固和加深对数据库基础理论和基本知识的理解,进一步掌握了使用数据库进行软件设计的基本思想和方法,提高了运用数据库理论解决实际问题的能力,锻炼了实际动手能力、创新能力,培养了调查研究、查阅技术文献、资料、手册以及编写文档的能力。
二、需求分析系统开发的总体任务是实现各种信息的系统化、规范化和自动化。
系统功能分析是在系统开发的总体任务的基础上完成。
本仓库管理系统需要完成功能主要有:●用户登录。
实现根据不同用户的权限进行登录,并转到相应权限的操作。
●用户管理。
实现管理人员添加、修改、删除用户;一般用户修改信息等功能。
数据结构课程设计报告_遍历⼆叉树XXXX⼤学《数据结构》课程设计报告课题名称: 遍历⼆叉树系(院):专业:班级:组员姓名:学号:指导教师:开课时间: 学年学期摘要树结构在客观世界中⼴泛存在, 如⼈类社会的族谱和各种社会组织机构都可⽤树形象表⽰. 树在计算机领域中也得到⼴泛应⽤,如在编译源程序时, 可⽤树表⽰源程序的语法结构. ⼜如在数据库系统中, 树型结构也是信息的重要组织形式之⼀. ⼀切具有层次关系的问题都可⽤树来描述.针对这样的问题, 我选择了⼆叉树的遍历作为我的课程设计主题, 编写程序, 实现对⼆叉树的遍历. 在本次课程设计中, ⼆叉树的建⽴使⽤了递归算法;在前序、中序和后续遍历的算法中则同时使⽤了递归与⾮递归的算法, 即在这些遍历算法的实现中使⽤了栈结构与队列结构, 提供了6种不同的遍历⽅式, 供使⽤者选择. 同时, 该程序具有输出层序遍历的功能, 层序遍历模块使⽤了⾮递归算法. 该程序基本实现了对⼆叉树的遍历, 对于递归与⾮递归算法, 我们应从实际应⽤中体验这些算法的优越性.关键词: 层次关系, ⼆叉树建⽴, 递归与⾮递归, 遍历, 栈, 队列⽬录⼀、问题描述 (1)⼆、需求分析 (1)2.1主功能模块 (1)2.2创建树模块 (1)2.3遍历树模块 (1)三、概要设计 (2)3.1主界⾯设计思想流程图 (2)3.2. 创建⼆叉树 (2)3.2.1⼆叉树创建的思想 (2)3.2.2⼆叉树创建的算法流程图 (2)3.3.先序递归遍历 (3)3.3.1先序递归遍历思想 (3)3.3.2先序递归遍历的算法流程图 (3)3.4.中序递归遍历 (3)3.4.1中序递归遍历思想 (3)3.4.2中序递归遍历的算法流程图 (4) 3.5.后序递归遍历 (4)3.5.1后序递归遍历思想 (4)3.5.2后序递归遍历的算法流程图 (5) 3.6.先序⾮递归遍历 (5)3.6.1先序⾮递归遍历思想 (5)3.6.2先序⾮递归遍历的算法流程图 (6) 3.7.中序⾮递归遍历 (6)3.7.1中序⾮递归遍历思想 (6)3.7.2中序⾮递归遍历的算法流程图 (7) 3.8.后序⾮递归遍历 (7)3.8.1后序⾮递归遍历思想 (7)3.8.2后序⾮递归遍历的算法流程图 (8) 3.9.层序⾮递归遍历 (8)3.9.1层序⾮递归遍历思想 (8)3.9.2层序⾮递归遍历的算法流程图 (9)四、详细设计 (10)4.1界⾯设计 (10)4.2.详细代码分析 (11)4.2.1主模块 (11)4.2.2创建树模块 (12)4.2.3遍历树模块 (13)五、调试分析 (13)5.1.调试结果 (13)5.1.1实验数据 (13)5.1.2创建树界⾯ (14)5.1.3输出结果界⾯ (14)5.2.算法分析 (16)5.2.1时间复杂度 (16)5.2.2空间复杂度 (16)5.3.程序的不⾜ (16)5.3.1程序不⾜之处 (16)六、⼼得体会 (17)七、参考⽂献 (17)⼀、问题描述建⽴⼆叉树, 层序、先序、中序、后序遍历.(⽤递归或⾮递归的⽅法都可以)要求能够输⼊树的各个结点, 并能够输出⽤不同⽅法遍历的遍历序列;分别建⽴⼆叉树存储结构的的输⼊函数、输出层序遍历序列的函数、输出先序遍历序列的函数、输出中序遍历序列的函数、输出后序遍历序列的函数.⼆、需求分析在现实世界层次化的数据模型中, 数据与数据之间的关系纷繁复杂. 其中很多关系⽆法使⽤简单的线性结构表⽰清楚, ⽐如祖先与后代的关系、整体与部分的关系等. 于是⼈们借鉴⾃然界中树的形象创造了⼀种强⼤的⾮线性结构——树. 树形结构的具体形式有很多种, 其中最常⽤的就是⼆叉树. ⽽⼆叉树的多层次遍历遍历则是⼆叉树的重要内容.本程序⽤Microsoft Visual C++ 6.0编写, 可以实现对⼆叉树的创建、采⽤递归和⾮递归等两种⽅式先序、中序、后序进⾏遍历.2.1主功能模块通过合理的界⾯设计, 根据提⽰信息, 使⽤者可以⽅便快捷地运⾏本程序来完成创建、遍历⼆叉树等操作. 界⾯美观, ⼈性化, 程序智能, 安全性⾼.2.2创建树模块当进⼊程序运⾏界⾯后, 根据提⽰输⼊需要建⽴的⼆叉树, 按照先序次序输⼊各个结点的值, 完成⼆叉树的建⽴.2.3遍历树模块实现对该⼆叉树的先序递归遍历、先序⾮递归遍历、中序递归遍历、中序⾮递归遍历、后序递归遍历、后序⾮递归遍历、层序⾮递归遍历等⽅式的遍历操作, 并输出各遍历序列.三、概要设计3.1主界⾯设计思想流程图3.2. 创建⼆叉树3.2.1⼆叉树创建的思想(1)定义⼆叉树结点值的类型为字符型.(2)结点个数不超过10个.(3)按先序次序输⼊, 构造⼆叉链表表⽰的⼆叉树T, 空格表⽰空树. 相关函数如下:void CreateBiTree(BiTree &T)3.2.2⼆叉树创建的算法流程图3.3.先序递归遍历3.3.1先序递归遍历思想若⼆叉树为空, 则空操作;否则(1)访问根结点;(2)先序遍历左⼦树;(3)先序遍历右⼦树. 相关函数如下: void PreOrderTraverse(BiTree T) 3.3.2先序递归遍历的算法流程图3.4.中序递归遍历3.4.1中序递归遍历思想若⼆叉树为空, 则空操作;否则(1)中序遍历左⼦树;(2)访问根结点;(3)中序遍历右⼦树. 相关函数如下: void InOrderTraverse(BiTree T) 3.4.2中序递归遍历的算法流程图3.5.后序递归遍历3.5.1后序递归遍历思想若⼆叉树为空, 则空操作;否则(1)后序遍历左⼦树;(2)后序遍历右⼦树;(3)访问根结点. 相关函数如下: void PostOrderTraverse(BiTree T)3.6.先序⾮递归遍历3.6.1先序⾮递归遍历思想(1)访问结点的数据域;(2)指针指向p的左孩⼦结点;(3)从栈中弹出栈顶元素;(4)指针指向p的右孩⼦结点. 相关函数如下: void NRPreOrder(BiTree bt)3.7.中序⾮递归遍历3.7.1中序⾮递归遍历思想(1)指针指向p的左孩⼦结点;(2)从栈中弹出栈顶元素;(3)访问结点的数据域;(4)指针指向p的右孩⼦结点. 相关函数如下: void NRInOrder(BiTree bt)3.7.2中序⾮递归遍历的算法流程图3.8.后序⾮递归遍历3.8.1后序⾮递归遍历思想若⼆叉树为空, 则空操作;否则引⼊栈和标记模拟递归⼯作栈, 初始时栈为空. 相关函数如下: void NRPostOrder(BiTree bt);3.8.2后序⾮递归遍历的算法流程图3.9.层序⾮递归遍历3.9.1层序⾮递归遍历思想(1)访问该元素所指结点.(2)若该元素所指结点的左右孩⼦结点⾮空, 则该元素所指结点的左孩⼦指针和右孩⼦指针顺序⼊队. 相关函数如下: void LevelOrderTraverse(BiTree T)3.9.2层序⾮递归遍历的算法流程图四、详细设计4.1界⾯设计图4-1 系统运⾏主界⾯图4-2 创建⼆叉树界⾯图4-3 ⼆叉树递归遍历界⾯4.2.详细代码分析4.2.1主模块本模块定义了系统运⾏主界⾯的相关内容和相关操作函数, 源代码如下: void main(){BiTree T;T=NULL;int select;//cout<<"请按先序次序输⼊各结点的值, 以空格表⽰空树(输⼊时可连续输⼊):"< while(1){cout<<"\n\n请选择要执⾏的操作:\n";cout<<"1.创建⼆叉树\n";cout<<"2.⼆叉树的递归遍历算法(前、中、后)\n";cout<<"3.⼆叉树的层次遍历算法\n";cout<<"4.⼆叉树的⾮递归遍历算法(前、中、后)\n";cout<<"0.退出\n";cin>>select;switch(select){case 0:return;case 1:cout<<"请按先序次序输⼊各结点的值, 以空格表⽰空树(输⼊时可连续输⼊):"< CreateBiTree(T);break;case 2:if(!T) cout<<"未建⽴树, 请先建树!";else{cout<<"\n先序遍历:\n";PreOrderTraverse(T);cout<<"\n中序遍历:\n";InOrderTraverse(T);cout<<"\n后序遍历:\n";PostOrderTraverse(T);}break;case 3:cout<<"\n层序遍历:\n";LevelOrderTraverse(T);break;case 4:if(!T) cout<<"未建⽴树, 请先建树!";else{cout<<"\n先序遍历:\n";NRPreOrder(T);cout<<"\n中序遍历:\n";NRInOrder(T);cout<<"\n后序遍历:\n";NRPostOrder(T);}break;default:cout<<"请确认选择项:\n";}//end switch}//end while}4.2.2创建树模块源代码如下:void CreateBiTree(BiTree &T){//按先序次序输⼊, 构造⼆叉链表表⽰的⼆叉树T, 空格表⽰空树// if(T) return;char ch;ch=getchar(); //不能⽤cin来输⼊, 在cin中不能识别空格.if(ch==' ') T=NULL;else{if(!(T=(BTNode *)malloc(sizeof(BTNode)))) cout<<"malloc fail!";T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild);}}4.2.3遍历树模块本模块包括了各种遍历⼆叉树的函数, 源代码如下:void PreOrderTraverse(BiTree T) //⼆叉树的先序遍历(递归)成员函数声明void InOrderTraverse(BiTree T) //⼆叉树的中序遍历(递归)成员函数声明void PostOrderTraverse(BiTree T) //⼆叉树的后序遍历(递归)成员函数声明void LevelOrderTraverse(BiTree T) // ⼆叉树的层序遍历(⾮递归)成员函数声明void NRPreOrder(BiTree bt) // ⼆叉树的先序遍历(⾮递归)成员函数声明void NRInOrder(BiTree bt) //⼆叉树的中序遍历(⾮递归)成员函数声明void NRPostOrder(BiTree bt) //⼆叉树的后序遍历(⾮递归)成员函数声明五、调试分析5.1.调试结果5.1.1实验数据这棵树是随机画的, 由数据结构知识, 按照先序次序输⼊各个节点的值为: ABD###CEG###F#H##(此处#代表空格). 在程序中输⼊这些节点, 创建树, 如下图:5.1.2创建树界⾯图5-1 创建树界⾯5.1.3输出结果界⾯输⼊2, 输出该⼆叉树递归遍历算法的遍历结果, 结果如下:输⼊3, 输出该⼆叉树层序遍历算法的遍历结果, 结果如下:输⼊4, 输出该⼆叉树⾮递归遍历算法的遍历结果, 结果如下:。
1 数据结构课程设计报告 目录 第一章 设计目的 ........................................................................................................................... 3 第二章 设计任务及要求 ............................................................................................................... 3 一、 基本要求 ................................................................................................................... 3 二、 内容 ........................................................................................................................... 3 第三章 题目分析与解答 ................................................................................................................. 4 一、 仓库管理系统 ........................................................................................................... 4 1. 题目要求 ............................................................................................................ 4
2. 应用程序功能 .................................................................................................... 4 3. 输入数据类型、格式和内容限制 .................................................................... 6 4. 主要模块的算法描述 ........................................................................................ 6 5. 源程序代码 ........................................................................................................ 7 二、 通讯录管理系统 ..................................................................................................... 13 1. 题目要求 .......................................................................................................... 13
2. 应用程序功能 .................................................................................................. 13 3. 输入数据类型、格式和内容限制 .................................................................. 15 4. 主要算法模块描述 .......................................................................................... 16 5. 源程序代码 ...................................................................................................... 16 三、 猴子选大王 ............................................................................................................. 22 1. 题目要求: ...................................................................................................... 22
2. 应用程序功能 .................................................................................................. 22 3. 输入数据类型、格式和内容限制 .................................................................. 23 4. 主要算法模块描述 .......................................................................................... 23 5. 源程序代码 ...................................................................................................... 23 四、 二叉树运算2 .......................................................................................................... 26 1. 题目要求 .......................................................................................................... 26
2. 应用程序功能 .................................................................................................. 26 3. 输入数据类型、格式和内容限制 .................................................................. 26 4. 主要算法模块描述 .......................................................................................... 26 2
5. 源程序代码 ...................................................................................................... 28 3
第一章 设计目的 一、培养学生运用算法与数据结构的基本知识解决实际编程中的数据结构设计和算法设计问题。 二、培养学生独立设计程序与解决问题的能力,培养学生团队协作集成程序模块及调试能力。 三、培养学生初步的软件设计及软件测试的能力。
第二章 设计任务及要求
一、 基本要求 学生必须仔细阅读《数据结构》课程设计指导书,认真主动完成课设的要求。有问题及时主动通过各种方式与教师联系沟通。 学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时的向教师汇报。 课程设计按照教学要求需要一周时间完成,一周中每天(按每周5天)至少要上3-4小时的机来调试C语言设计的程序,总共至少要上机调试程序15小时。 根据设计报告要求编写设计报告,主要内容包括目的、意义、原理和实现方法简介、过程分析及说明、实验结果情况说明、结论。 每个人必须有可运行的程序,学生能对自己的程序面对教师提问并能熟练地解释清楚,学生回答的问题和程序运行的结果作为评分的主要衡量标准。
二、 内容 本次课程设计完成如下模块:仓库管理系统、通讯录管理系统、猴子选大王及二叉树运算2。 4
第三章 题目分析与解答 一、 仓库管理系统 1. 题目要求 设计一个仓库管理系统,可以按照顺序和货物名称查询仓库的存储情也可以增加或删除货物。 struct node { char NO; //商品编号 char name[max]; //商品名称 char count; //商品数量 };
2. 应用程序功能 开始运行时界面如下:
仓库管理链表建立界面如下: 5
仓库管理链表插入界面如下: 仓库管理链表查询界面如下: 按商品编号查询界面如下: 6
按商品名称查询界面如下: 仓库管理链表删除界面如下: 仓库管理链表输出界面如下: 3. 输入数据类型、格式和内容限制 输入数据类型为字符型,但在输入过程中不可出现空格,如在输入商品名称时不可出现空格。
4. 主要模块的算法描述 流程图: