您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 《数据结构与算法》课程设计报告
《数据结构与算法》课程设计报告实验人:计算机科学与技术(软件开发方向)计软05-3刘显明学号:0504030312一、设计题目:停车场管理二、问题描述:设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在南端,最先到达的第一辆车停放在停车场的最北端),若停车场内已停了n辆汽车,则后来的汽车只能在门外的通道上等候,一旦有车开走,收排在通道上的第一辆车即可开入;当停车场内每辆车要离开时,在它之后进入的车辆必须先退出停车场为其让路,待该辆车开出大门,其他车辆再按原次序进入停车场,每辆停放在停车场的车在它离开停车场时必须按它停留在停车场内的时间长短交纳停车费。试为停车场编写按上述要求进行管理的模拟程序。三、基本要求:以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车到达或离去信息,汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。四、测试数据:设n=2,输入数据:('A',1,5),('A',2,15),('D',1,15),('A',3,20),('A',4,25),('A',5,30),('D',2,35),('D',4,40),('E',0,0)。其中:'A'表示到达(arrival);'D'表示离去(departure);'E'表示输出(end)。五、实现提示:需要另设一个栈,临时停放为给要离去的汽车让路而从停车车退出来的汽车,也用顺序存储结构实现。输入数据按到达的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车车的时刻。六、需求分析:(1)以顺序栈来表示停车场,限定停车场的容量n。以链队列来表示便道。限制以实型变量money来存放停车场费率。(2)按照从终端读入的数据序列进行模拟管理。每辆车需要三个数据,其中车辆数据为:A表示到达,D表示离去,E表示程序结束。车辆牌照为整型数据。进场或离场时间同样为整型数据。(3)对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。(4)该程序可以模拟停车场的管理过程。(5)测试数据:设n=2,输入数据:('A',1,5),('A',2,15),('D',1,15),('A',3,20),('A',4,25),('A',5,30),('D',2,35),('D',4,40),('E',0,0)。其中:'A'表示到达(arrival);'D'表示离去(departure);'E'表示输出(end)。七、概要设计:1.设定栈的抽象数据类型定义为:ADTstack{数据对象:D={ai|ai∈charset,I=1,2,……,n,n=0}数据关系:R1={ai-1,aiai-1,ai∈D,I=2……,n}基本操作:Initstack(&S)操作结果:构造一个空栈S。DestroyStack(&S)初始条件:栈S已经存在。操作结果:操作结果:销毁栈S。ClaerStack(&S)初始条件:栈S已经存在。操作结果:将S清空为空栈。StackLength(&S)初始条件:栈S已经存在。操作结果:返回栈S的长度。StackEmpty(&S)初始条件:栈S已经存在。操作结果:若S为空栈,则返回TURE,否则返回FALSE。GetTop(S,&e)初始条件:栈S已经存在。操作结果:若栈S不空,则以e返回栈顶元素。Push(&S,e)初始条件:栈S已经存在。操作结果:在栈S的栈顶插入新的栈顶元素e。Pop(&S,&e)初始条件:栈S已经存在。操作结果:删除S的栈顶元素,并以e返回其值。StackTraverse(S,visit())初始条件:栈S已经存在。操作结果:从栈底到栈顶依次对S中的每个元素调用函数visit()。}ADTstack2.设定链式队列的抽象数据类型为:typedefstructQnode{QelemTypedata;StructQnode*next;}Qnode,*QueuePtr;typedefstruct{QueuePtrfront;//队头指针QueuePtrrear;//队尾指针ADTQueue{数据对象:D={ai|ai∈ElemSet,i=1,2,……,n,n=0}数据关系:R1={ai-1,ai|ai-1,ai∈D,i=2,……,n}约定其中端为队列头,端为队列尾。基本操作:InitQueue(&Q)操作结果:构造一个空队列Q。DestroyQueue(&Q)初始条件:队列Q已经存在。操作结果:队列Q被销毁,不再存在。ClearQueue(&Q)初始条件:队列Q已经存在。操作结果:将Q清为空队列。QueueEmpty(Q)初始条件:队列Q已经存在。操作结果:若Q为空队列,则返回TRUE,否则FALSE。QueueLength(Q)初始条件:队列Q已经存在。操作结果:返回Q的元素个数,即队列的长度。GetHead(Q,&e)初始条件:Q为非空队列。操作结果:用e返回的e队头元素。EnQueue(&Q,e)初始条件:队列Q已经存在。操作结果:插入元素e为Q的新的队尾元素。DeQueue(&Q,&e)初始条件:Q为非空队列。操作结果:删除Q的队头元素,并用e返回其值。QueueTraverse(Q,visit())初始条件:Q已经存在且非空。操作结果:从队头到队尾,依次对Q的每个数据元素调用函数visit()。一旦visit()失败,则操作失败。}ADTQueue3.本程序有4个模块1)主程序模块main(){初始化while(命令==1){接受命令;/*绘表*/do{命令;}while(重复条件)if(条件){if(条件){接受命令;处理命令;for(初始值;循环条件;自加运算){for(初始值;循环条件;自加运算)}elseif{接受命令;处理命令;}}if(条件){接受命令;处理命令;do{命令;}while(循环条件){接受命令;处理命令;}else{接受命令;退出程序;}}2)2个栈模块-----实现栈抽象数据类型3)队列模块----实现队列抽象数据类型各模块之间的调用关系:主程序模块栈模块队列模块八、详细设计:1.求停车车管理的详细算法#includestdio.h#includealloc.h#includestdlib.h/*#defineNULL0*/#defineERROR0#defineOK1#defineOVERFLOW0#defineSTACK_INIT_SIZE2/*车库容量*//*----------------------------------------------------------------------*/typedefstructtime{inthour;intmin;}Time;/*时间结点*//*----------------------------------------------------------------------*/typedefstruct/*车信息*/{charlabel;floattime;}Car,Car2;typedefstruct/*车库信息*/{Car*top;Car*base;intstacksize;}SqStack;intInitStack(SqStack*S){S-base=(Car*)malloc(STACK_INIT_SIZE*sizeof(Car));if(!(S-base))returnERROR;S-top=S-base;S-stacksize=STACK_INIT_SIZE;returnOK;}intStackEmpty(SqStackS){if(S.top==S.base)returnOK;elsereturnERROR;}intStackFull(SqStackS){if(S.top-S.base=STACK_INIT_SIZE)returnOK;elsereturnERROR;}intPush(SqStack*S,Care){if(S-top-S-base=STACK_INIT_SIZE)returnOVERFLOW;else{*(S-top++)=e;returnOK;}}intPop(SqStack*S,Car*e){if(S-top==S-base)returnERROR;*e=*(--(S-top));}/*----------------------------------------------------------------*/typedefstruct/*备用车道*/{Car2*top2;Car2*base2;intstacksize2;}SqStack2;intInitStack2(SqStack2*S2){S2-base2=(Car2*)malloc(STACK_INIT_SIZE*sizeof(Car2));if(!(S2-top2))returnERROR;S2-top2=S2-base2;S2-stacksize2=STACK_INIT_SIZE;returnOK;}intPush2(SqStack2*S2,Car2e2){if(S2-top2-S2-base2=STACK_INIT_SIZE)returnOVERFLOW;*(S2-top2++)=e2;returnOK;}intPop2(SqStack2*S2,Car2*e2){if(S2-top2==S2-base2)exit(OVERFLOW);*e2=*(--(S2-top2));returnOK;}intStackEmpty2(SqStack2S2){if(S2.top2==S2.base2)returnOK;elsereturnERROR;}/*--------------------------------------------------------------------*/typedefstructQNode/*车道信息*/{Cardata;structQNode*next;}QNode,*QueuePtr;typedefstruct{QueuePtrfront;QueuePtrrear;}LinkQueue;intInitQueue(LinkQueue*Q){Q-front=Q-rear=(QueuePtr)malloc(sizeof(QNode));if(!(Q-front))returnERROR;Q-front-next=NULL;returnOK;}intEnQueue(LinkQueue*Q,Care){QueuePtrp;p=(QueuePtr)malloc(sizeof(QNode));if(!p)returnERROR;p-data=e;p-next=NULL;Q-rear-next=p;Q-rear=p;returnOK;}intQueueEmpty(LinkQueueQ){if(Q.front==Q.rear)returnOK;elsereturnERROR;}intDeQueue(LinkQueue*Q,Car*e){QueuePtrp;if(Q-front==Q-rear)returnERROR;p=Q-front-next;*e=p-data;Q-front-next=p-next;if(Q-rear==p)Q-rear=Q-front;free(p);returnOK;}/*-------------------------------------------------------------
本文标题:《数据结构与算法》课程设计报告
链接地址:https://www.777doc.com/doc-4474134 .html