停车场管理系统实验报告汇总

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第1页共15页华北水利水电学院数据结构实验报告2011~2012学年第二学期2011级计算机专业班级:****学号:*****姓名:****-实验二栈和队列及其应用一、实验目的:1.掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构和链式存储结构,以便在实际问题背景下灵活应用。2.掌握队列的特点(先进先出FIFO)及基本操作,如入队、出队等,队列顺序存储结构、链式存储结构和循环队列的实现,以便在实际问题背景下灵活运用。二、实验内容:1.链栈的建立、入栈、出栈操作。2.环形队列的建立、入队、出队操作。3.停车场管理。设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。实现提示:以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表(带头结点)实现。需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。设n=2,输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘A’,5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,其中,‘A’表示到达;‘D’表示离去,‘E’表示输入结束。三、实验要求:1.C/C++完成算法设计和程序设计并上机调试通过。2.撰写实验报告,提供实验结果和数据。3.写出算法设计小结和心得。四、程序源代码:1.#includeiostream.h#includestdlib.htypedefstructstnode{intdata;stnode*next;第2页共15页}LinkStack;//创建一个栈头结点,无头结voidInitStack(LinkStack*&ls){ls=NULL;}//进栈,相当于头插法voidPush(LinkStack*&ls,intx){LinkStack*p;p=(LinkStack*)malloc(sizeof(LinkStack));p-data=x;p-next=NULL;p-next=ls;ls=p;}//出栈voidPop(LinkStack*&ls){if(ls==NULL)return;LinkStack*p;intx;p=ls;while(p){x=p-data;ls=p-next;coutx;free(p);p=ls;}cout出栈成功!!endl;}//创建栈voidCreatStack(LinkStack*&ls){InitStack(ls);inti=1,num;cout以000表示输入结束!!endl;while(1){cout请输入第i个元素:;cinnum;if(num==000)第3页共15页break;Push(ls,num);i++;}cout进栈成功!!endl;}voidmain(){LinkStack*ls,*p;CreatStack(ls);Pop(ls);}2.#includeiostream.h#defineQueueSize100typedefstructsqqueue{intdata[QueueSize];intfront,rear;}SqQueue;//初始化队列voidInitQueue(SqQueue&qu){qu.rear=qu.front=0;}//进队intEnQueue(SqQueue&sq,intx){if((sq.rear+1)%QueueSize==sq.front)return0;sq.rear=(sq.rear+1)%QueueSize;sq.data[sq.rear]=x;return1;}//出队voidDeQueue(SqQueue&sq){intx;if(sq.front==sq.rear)return;while(sq.front!=sq.rear){sq.front=(sq.front+1)%QueueSize;x=sq.data[sq.front];coutx;}第4页共15页cout出队成功!!endl;}//创建队voidCreatQueue(SqQueue&sq){InitQueue(sq);intnum,i=1;cout以000表示输入结束!!endl;while(1){cout请输入第i个元素:;cinnum;if(num==000)break;EnQueue(sq,num);i++;}cout进队成功!!endl;}voidmain(){SqQueuesq;CreatQueue(sq);DeQueue(sq);}3.#includeiostream.h#includestdlib.h#includestdio.h#defineMAX2#defineprice0.05typedefstructnode{inthour;intmin;}Time;//时间结点typedefstructNode{charnum[10];//车牌号Timereach;//时间Timeleave;}CarNode;//车辆信息结点typedefstructNODE{CarNode*stack[MAX];inttop;第5页共15页}CarStack;//顺序栈模拟车站typedefstructQNode//队列{CarNode*data;QNode*next;}QueueNode;//链队结点类型typedefstructpqrt{QueueNode*front,*rear;//设置头指针尾指针}LinkQueueCar;//模拟通道//初始化栈voidInitStack(CarStack*cs);//初始化队列(便道)intInitQueue(LinkQueueCar*qc);//车辆到达intArrival(CarStack*Enter,LinkQueueCar*qc);//车辆离开voidLeave(CarStack*Enter,CarStack*Temp,LinkQueueCar*qc);//显示车库信息voidList(CarStacks,LinkQueueCarw);voidmain(){CarStackEnter,Temp;LinkQueueCarWait;intch;InitStack(&Enter);InitStack(&Temp);InitQueue(&Wait);while(1){cout欢迎光临endl;cout-----------------------endl;cout1.车辆到达endl;cout2.车辆离开endl;cout3.车场显示endl;cout4.退出程序endl;cout-----------------------endl;cout请选择所需的服务!endl;while(1){cinch;if(ch=1&&ch=4)break;}switch(ch)第6页共15页{case1:Arrival(&Enter,&Wait);break;case2:Leave(&Enter,&Temp,&Wait);break;case3:List(Enter,Wait);break;case4:exit(0);break;default:break;}}}voidInitStack(CarStack*cs){cs-top=-1;//初始化栈for(inti=0;iMAX;i++)cs-stack[cs-top]=NULL;}intInitQueue(LinkQueueCar*qc)//初始化队列{//qc=(LinkQueueCar*)malloc(sizeof(LinkQueueCar));这句话不能要?????qc-front=(QueueNode*)malloc(sizeof(QueueNode));if(qc-front!=NULL){qc-front-next=NULL;//带头结点的qc-rear=qc-front;//一定要注意赋值顺序不能反了!!!!!!!!!!return1;}elsereturn-1;}//打印车站车离开的信息voidPrint(CarNode*p,introom){intA1,A2,B1,B2;//车辆收费cout请输入离开时间:/**:**/endl;cout请输入离开时间的时(0-23):;cinp-leave.hour;while(p-leave.hourp-reach.hour||p-leave.hour23){couterror!!endl;cinp-leave.hour;}B1=p-leave.hour;第7页共15页cout请输入离开时间的分钟(0-59):;cinp-leave.min;while(p-leave.min0||p-leave.min59){couterror!!endl;cinp-leave.min;}B2=p-leave.min;coutendl离开汽车的车牌号为:endl;puts(p-num);cout其到达时间为:p-reach.hour:p-reach.minendl;cout其离开时间为:p-leave.hour:p-leave.minendl;A1=p-reach.hour;A2=p-reach.min;cout应交费用为:((B1-A1)*60+(B2-A2))*price元endl;free(p);}intArrival(CarStack*Enter,LinkQueueCar*qc){CarNode*p;QueueNode*t;p=(CarNode*)malloc(sizeof(CarNode));cout请输入车牌号(例A8888):endl;gets(p-num);if((Enter-top+1)MAX){Enter-top++;cout车辆在车场第Enter-top位置endl;cout请输入到达时间:/**:**/endl;cout请输入到达时间的时(0-23):;cinp-reach.hour;while(p-reach.hour0||p-reach.hour23){couterror!!endl;cinp-reach.hour;}cout请输入到达时间的分(0-59):;cinp-reach.min;Enter-stack[Enter-top]=p;//注意数组下标是从0开始,在显

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功