资源描述:
《数据结构实验报告(霍夫曼树,二叉排序树,车库问题).doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、数据结构实验报告实验一线性表操作与停车场管理方案设计一、需求分析1.输入的形式和输入值的范围本程序中,需输入的车库中车的总数n与出库车序m为正整数,由键盘输入,以回车结束2.输出的形式通过屏幕输出每辆车的调度结果,包括车辆出库及入库后库内库外车辆序列3.程序所能达到的功能用户从键盘输入需要的数据,从屏幕输出结果4.测试数据请输入车库中车辆的总数:10请输入出库车辆数量:3请输入第1辆出库的车辆序号:6请输入第2辆出库的车辆序号:7请输入第3辆出库的车辆序号:3车库的初始情况为:123456789
2、10第6辆车可以开出停车场时车辆的情况为:车库中:123456待入库:10987第6辆车开出后停车场车辆的情况为:车库中:1234510987第7辆车可以开出停车场时车辆的情况为:车库中:1234510987待入库:第7辆车开出后停车场车辆的情况为:车库中:123451098第3辆车可以开出停车场时车辆的情况为:车库中:123待入库:891054第3辆车开出后停车场车辆的情况为:车库中:12891054一、概要设计以栈和队列结构实现该实验1.抽象数据类型定义ADTQueue{数据对象:D={ai
3、
4、ai∈ElemSet,i=1,2,…,n,n≥0}数据关系:R1={
5、ai-1,ai∈D,i=2,…,n}约定其中ai端为队列头,an端为队列尾基本操作:InitQueue(&Q)操作结果:构造一个空队列QDestroyQueue(&Q)初始条件:队列Q已存在操作结果:队列Q被销毁,不再存在ClearQueue(&Q)初始条件:队列Q已存在操作结果:将Q清为空队列QueueEmpty(Q)初始条件:队列Q已存在操作结果:若Q为空队列,则返回TRUE,否则FALSEQueueL
6、ength(Q)初始条件:队列Q已存在操作结果:返回Q的元素个数,即队列长度GetHead(Q,&e)初始条件:Q为非空队列操作结果:用e返回Q的队头元素EnQueue(&Q,e)初始条件:队列Q已存在操作结果:插入元素e为Q的新队尾元素DeQueue(&Q,&e)初始条件:Q为非空队列操作结果:删除Q的队头元素,并用e返回其值QueueTraverse(Q,visit())初始条件:Q已存在且非空操作结果:从队头到队尾,依次对Q的每个数据元素调用函数visit()。一旦visit()失败,则操
7、作失败。}ADTQueueADTStack{数据对象:D={ai
8、ai∈ElemSet,i=1,2,...,n,n≥0}数据关系:R1={
9、ai-1,ai∈D,i=2,...,n}约定an端为栈顶,a1端为栈底。基本操作: InitStack(&S)操作结果:构造一个空栈S。DestroyStack(&S) 初始条件:栈S已存在。 操作结果:栈S被销毁。 ClearStack(&S) 初始条件:栈S已存在。 操作结果:将栈S清为空栈。 StackE
10、mpty(S) 初始条件:栈S已存在。 操作结果:若栈S为空栈,则返回TRUE,否则FALSE。 StackLength(s) 初始条件:栈S已存在。 操作结果:返回S的元素个数,既栈的长度。 GetTop(S,&e) 初始条件:栈S已存在且非空。 操作结果:用e返回S的栈顶元素。 Push(&S,e) 初始条件:栈S已存在。操作结果:插入元素e为新的栈顶元素。 Pop(&S,&e) 初始条件:栈S已存在且非空。 操作结果:删除S的栈
11、顶元素,并用e返回其值。 StackTraverse(S,visit()) 初始条件:栈S已存在且非空。 操作结果:从栈底到栈顶依次对S的每个数据元素调用函数visit()。一旦visit()失败,则操作失效。}ADTStack1.主程序流程voidmain(){初始化;输入数据;执行功能;显示结果;}1.各程序模块间调用关系主程序↓各功能模块一、详细设计#include#include//定义栈及操作typedefintStatus;type
12、defcharSElemType;#defineSTACK_INIT_SIZE100;//栈存储空间的初始分配量#defineSTACKINCREMENT10;//存储空间分配增量typedefstruct{SElemType*base;//存储数据元素的数组SElemType*top;//栈顶指针intstacksize;//当前分配的栈空间大小}SqStack;StatusInitStack(SqStack&S){//构造一个空栈SS.base=(SElemType*)malloc(size