版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、华北水利水电学院数据结构实验报告201120丝学年第一学期2011级计算机专业班级:*学号:*姓名:*实验二栈和队列及其应用一、实验目的:1 .掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构和链式存储结构,以便在实际问题背景下灵活应用。2 .掌握队列的特点(先进先出FIFO)及基本操作,如入队、出队等,队列顺序存储结构、链式存储结构和循环队列的实现,以便在实际问题背景下灵活运用。二、实验内容:1 .链栈的建立、入栈、出栈操作。2 .环形队列的建立、入队、出队操作。3 .停车场管理。设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场
2、内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。实现提示:以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车到达”或离去”信息、汽车牌照号码及到达或离
3、去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表(带头结点)实现。需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。设n=2,输入数据为:(A'1,5),(飞2,10),('D;1,15),('A'3,20),(飞4,25),('A'5
4、,30),('D'2,35),('D;4,40),('日0,0)。每一组输入数据包括三个数据项:汽车到达”或离去”信息、汽车牌照号码及到达或离去的时刻,其中,酸示到达;诙示离去,或示输入结束。三、实验要求:1 .C/C+完成算法设计和程序设计并上机调试通过。2 .撰写实验报告,提供实验结果和数据。3 .写出算法设计小结和心得。四、程序源代码:1.#include<iostream.h>#include<stdlib.h>typedefstructstnodeintdata;stnode*next;第1页共15页LinkStack;/创建一
5、个栈头结点,无头结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;co
6、ut<<x<<""free(p);p=ls;cout<<"出栈成功!!"<<endl;/创建栈voidCreatStack(LinkStack*&ls)(InitStack(ls);inti=1,num;cout<<"以000表示输入结束!"<<endl;while(1)(cout<<"请输入第"<<i<<"个元素:";cin>>num;if(num=000)共15页第
7、2页break;Push(ls,num);i+;)cout<<"进栈成功!"<<endl;)voidmain()(LinkStack*ls,*p;CreatStack(ls);Pop(ls);2.#include<iostream.h>#defineQueueSize100typedefstructsqqueue(intdataQueueSize;intfront,rear;SqQueue;/初始化队列voidInitQueue(SqQueue&qu)qu.rear=qu.front=0;/进队intEnQueue(SqQueue
8、&sq,intx)(if(sq.rear+1)%QueueSize=sq.front)return0;sq.rear=(sq.rear+1)%QueueSize;sq.datasq.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.datasq.front;cout<<x<<""第3页共15页cout<<
9、"出队成功!"<<endl;)/创建队voidCreatQueue(SqQueue&sq)(InitQueue(sq);intnum,i=1;cout<<"以000表示输入结束!"<<endl;while(1)(cout<<"请输入第"<<i<<"个元素:";cin>>num;if(num=000)break;EnQueue(sq,num);i+;)cout<<"进队成功!"<<e
10、ndl;)voidmain()(SqQueuesq;CreatQueue(sq);DeQueue(sq);)3.#include<iostream.h>#include<stdlib.h>#include<stdio.h>#defineMAX2#defineprice0.05typedefstructnode(inthour;intmin;Time;/时间结点typedefstructNode(charnum10;/车牌号Timereach;/时间Timeleave;CarNode;/车辆信息结点typedefstructNODE(CarNode*stack
11、MAX;inttop;第4页共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(C
12、arStack*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;cout<&l
13、t;"1.车辆到达"<<endl;cout<<"2.车辆离开"<<endl;cout<<"3.车场显示"<<endl;cout<<"4.退出程序"<<endl;cout<<""<<endl;cout<<"请选择所需的服务!"<<endl;while(1)(cin>>ch;if(ch>=1&&ch<=4)br
14、eak;switch(ch)第5页共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;i<MAX;i+)cs->stackcs->top=NULL;intInitQueue(LinkQueueCar*
15、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<&
16、lt;"请输入离开时间:/*:*/"<<endl;cout<<”请输入离开时间的时(0-23):"cin>>p->leave.hour;while(p->leave.hour<p->reach.hour|p->leave.hour>23)(cout<<"error!"<<endl;cin>>p->leave.hour;B1=p->leave.hour;第6页共15页cout<<"请输入离开时间的分钟(0-
17、59):"cin>>p->leave.min;while(p->leave.min<0|p->leave.min>59)cout<<"error!"<<endl;cin>>p->leave.min;B2=p->leave.min;cout<<endl<<"离开汽车的车牌号为:"<<endl;puts(p->num);cout<<"其至U达日间为:"<<p->reac
18、h.hour<<":"<<p->reach.min<<endl;cout<<"其离开日间为:"<<p->leave.hour<<":"<<p->leave.min<<endl;A1=p->reach.hour;A2=p->reach.min;cout<<"应交费用为:"<<(B1-A1)*60+(B2-A2)*price<<"元"<
19、;<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<<"位置"<&
20、lt;endl;cout<<"请输入到达时间:/*:*/"<<endl;cout<<”请输入到达时间的时(0-23):"cin>>p->reach.hour;while(p->reach.hour<0|p->reach.hour>23)cout<<"error!"<<endl;cin>>p->reach.hour;cout<<”请输入到达时间的分(0-59):"cin>>p->reach
21、.min;Enter->stackEnter->top=p;注意数组下标是从0开始,在显示时下标也要与之对应cout<<"车近停车场成功!"<<endl;return1;elsecout<<"该车需在便道上等待!"<<endl;第7页共15页t=(QueueNode*)malloc(sizeof(QueueNode);进队歹Ut->data=p;t->next=NULL;qc->rear->next=t;qc->rear=t;cout<<"车进
22、便道成功!!"<<endl;return1;voidLeave(CarStack*Enter,CarStack*Temp,LinkQueueCar*qc)CarNode*p,*t;QueueNode*q;introom;if(Enter->top>-1)/判断车场是否为空while(1)cout<<"请输入车在车场中的位置:";cin>>room;if(room=0&&room<=Enter->top)break;/要离开的车后面还有车,则后面的车需进入临时栈给前面的车让路while(En
23、ter->top>room)/用Enter->top和room相比看你的车在第几个位置,前面的几辆车需全部让路Temp->top+;Temp->stackTemp->top=Enter->stackEnter->top;Enter->stackEnter->top=NULL;Enter->top-;/让路完以后车再离开p=Enter->stackEnter->top;Enter->stackEnter->top=NULL;Enter->top-;/车离开后,如果临时栈里有车,重新进车站while(T
24、emp->top>=0)Enter->top+;Enter->stackEnter->top=Temp->stackTemp->top;Temp->stackTemp->top=NULL;Temp->top-;cout<<"临时车场里的车重新进站成功!"<<endl;第8页共15页Print(p,room);/调用计费函数/车离开后如果便道上有车,也进车站if(qc->front!=qc->rear&&Enter->top<MAX)/判断便道上是否有车
25、以及车站是否已满(q=qc->front->next;t=q->data;Enter->top+;cout«"便道上的"«t->num«"号车进入车场第"«Enter->top«"位置"<<endl;cout<<"请输入现在的时间:/*:*/"«endl;cout<<”请输入到达时间的时(0-23):"cin»t->reach.hour;while(t->
26、;reach.hour<0|t->reach.hour>23)(cout«"error!"«endl;cin»t->reach.hour;)cout<<”请输入到达时间的分(0-59):"cin»t->reach.min;qc->front->next=q->next;/出便道if(q=qc->rear)qc->front=qc->rear;Enter->stackEnter->top=t;/进车站free(q);cout«&
27、quot;便道的车进入停车场成功!"«endl;)elsecout«"便道里没有车!"«endl;)elsecout«"车场里没有车!"«endl;)voidListl(CarStack*s)/显示车场信息(inti;if(s->top>-1)(cout«"车场"«endl;cout«"位置时间车牌号"«endl;for(i=0;i<(s->top+1);i+)(cout«"
28、;"«i«""«s->stacki->reach.hour«":"«s->stacki->reach.min<<""«s->stacki->num«endl;)elsecout«"车场里没有车!"«endl;第9页共15页)voidList2(LinkQueueCar*w)/显示便道信息(QueueNode*p;p=w->front->next;/p先指向第
29、辆车,if(w->front!=w->rear)/判断便道是否为空(cout<<"等待车辆的号码为:"<<endl;while(p)/用指针p遍历输出数据(puts(p->data->num);p=p->next;)elsecout<<"便道里没有车!"<<endl;)voidList(CarStacks,LinkQueueCarw)/显示整个停车场的信息(intflag,tag;flag=1;while(flag)(cout<<"请选择1|2|3:&qu
30、ot;<<endl;cout<<"1.车场"<<""<<"2.便道"<<""<<"3.返回"<<endl;while(1)(cin>>tag;if(tag>=1|tag<=3)break;elsecout<<"请选择1|2|3:"<<endl;)switch(tag)(case1:List1(&s);break;case2:List2(&
31、amp;w);break;case3:flag=0;break;default:break;)第10页共15页五、程序运行情况(写出输入数据及运行结果)F广擞据给饱铠嗤tDgbug迪戋,©日”蓑24670-入元元元元元加-B123451du跖第第第第第功2律人人人入人成4以请请请清迂舞7jjiu匕!回F:一激振结构环形队吐ugiF形队列.苏甘0f!s036780叨入元元元元元队出-H12345!而第第第第第功8”入入人入47以请请清清g5I.E:|SJg停=D£bug停车场,exe'第11页共15页欢迎光临达开一存到高显程IsU!II请选择所需的服名?场达达达场8任
32、人A-木依8号功置/*魏!1-IU-«-JULILKJ.f达开一言倒离显程in请选择所需的服务,近170:>>39y2sH0-0-*cCMM时分位>叩叩加日一日一日郛成场达达达场车4dHs在入入d达开示到离显1234达开一律到离显程出STI-M-IM!M清选择所需的服务?请输入车牌号”如日888兀5666上等待,f请选择所需的服务?半一第12页共15页请选择所需的服务?请输入车牌号£例城即8,二帽置黠等待旗迎光临请选择所需的服务?诗1.清1.2等待车辆的号码为:£5666:213:2.便道3.<05:0A8SBB7:0R866SIQ1TB3返回睛选择i:213:1.丰场2.便道3.返回41时间车牌号1234达
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度外墙防水材料供应与施工服务合同2篇
- 2024年度二手房交易过程中税费承担合同2篇
- 考研临床医学综合能力(中医307)研究生考试试题及答案指导(2024年)
- 2024版工程施工作业安全流程规范合同3篇
- 内部承包合同协议(2024版):区块链技术应用
- 2024年度东莞市金融服务合同6篇
- 柳梅2024年度离婚心理咨询服务合同
- 2024年度货物进出口合同with标的:纺织品2篇
- 终身合同解雇赔偿标准
- 小产权房屋合同范本4篇
- 第四单元口语交际 《辩论- 在辩论中学辩论》教学实录 部编版语文九年级下册
- 箱形梁加工制作工艺
- 蝴蝶豌豆花(注音)A4打印版
- 人教版道德与法治五年级上册全册课时练习课件(2022年11月修订)
- 新教材人教A版高中数学选择性必修第二册全册教学课件(共541张)
- 【教学课件】少年正是读书时示范课件
- 煤矿井下高压水力压裂安全技术标准(审查修改稿)
- Module 5 Unit 1教案 初中英语 外研版 八年级上册 (2022学年)
- 儿童塑形性支气管炎课件
- 《化学反应工程》试题及答案基础部分
- 2022-2023学年天津市南开区翔宇中学化学九年级第一学期期中考试模拟试题含解析
评论
0/150
提交评论