




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、华北水利水电学院 数据结构 实验报告第 15 页 共 15 页20112012学年 第学期 2011级 计算机 专业班级:*学号:*姓名:*实验栈和队列及其应用实验目的:1掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构和链式存储结构, 以便在实际问题背景下灵活应用。2. 掌握队列的特点(先进先出FIFO)及基本操作,如入队、出队等,队列顺序存储结构、链式存储结构 和循环队列的实现,以便在实际问题背景下灵活运用。实验内容:1链栈的建立、入栈、出栈操作。2. 环形队列的建立、入队、出队操作。3. 停车场管理。设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可
2、供汽车进出。汽 车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦 有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆 必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场 的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的 模拟程序。实现提示:以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车到达”或
3、离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上 的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间 不收费)。栈以顺序结构实现,队列以链表(带头结点)实现。需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实 现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照 号码和进入停车场的时刻。设 n=2,输入数据为:( A 1 , 5), ( A 2, 10) , (D'1,15),( A3,20),( A
4、4,25),,表(A 5, 30), ( D' 2, 35) , ( D 4, 40), (E 0, 0)。每一组输入数据包括三个数据项:汽车 到达”或离去”信息、汽车牌照号码及到达或离去的时刻,其中,燄示到达; DI示离去,示输入结束。实验要求:C/ C+完成算法设计和程序设计并上机调试通过。1.2. 撰写实验报告,提供实验结果和数据。写出算法设计小结和心得。四、程序源代码:3.1. #i nclude<iostream.h> #in clude<stdlib.h> typ edef struct stnode int data;stnode *n ext;L
5、inkStack;/ 创建一个栈头结点,无头结 void InitStack(LinkStack *&ls)ls=NULL;/ 进栈,相当于头插法void Push(LinkStack *&ls,int x)LinkStack *p;p=(LinkStack *)malloc(sizeof(LinkStack);p->data=x;p->next=NULL;p->next=ls; /ls=p;出栈void Pop(LinkStack *&ls) if(ls=NULL)return;LinkStack *p;int x;p=ls;while(p)x=p-
6、>data; ls=p->next; cout<<x<<" "free(p);p=ls; /cout<<" 出栈成功 !"<<endl;创建栈void CreatStack(LinkStack *&ls)InitStack(ls);int i=1,num;cout<<" 以 000 表示输入结束 !"<<endl; while(1)cout<<" 请输入第 "<<i<<" 个元素
7、 :" cin>>num;if(num=000)break; Push(ls,num); i+;cout<<" 进栈成功! "<<endl;void main()LinkStack *ls,*p;CreatStack(ls);Pop(ls);2. #include<iostream.h>#define QueueSize 100typedef struct sqqueueint dataQueueSize;int front,rear;SqQueue;/ 初始化队列void InitQueue(SqQueue &am
8、p;qu)qu.rear=qu.front=0;/ 进队int EnQueue(SqQueue &sq,int x) if(sq.rear+1)%QueueSize=sq.front) return 0;sq.rear=(sq.rear+1)%QueueSize;sq.datasq.rear=x;return 1;出队/void DeQueue(SqQueue &sq)int x; if(sq.front=sq.rear) return;while(sq.front!=sq.rear)sq.front=(sq.front+1)%QueueSize;x=sq.datasq.fro
9、nt;cout<<x<<" "cout<<" 出队成功 !"<<endl;/ 创建队void CreatQueue(SqQueue &sq)InitQueue(sq);int num,i=1;cout<<" 以 000 表示输入结束! ! "<<endl;while(1)cout<<" 请输入第 "<<i<<" 个元素 :" cin>>num;if(num=000)br
10、eak;EnQueue(sq,num);i+;cout<<" 进队成功! "<<endl;void main()SqQueue sq;CreatQueue(sq);DeQueue(sq);3. #include<iostream.h>#include<stdlib.h>#include<stdio.h>#define MAX 2#define price 0.05typedef struct nodeint hour;int min;Time;/ 时间结点 typedef struct Node char num1
11、0;/ 车牌号 Time reach;/ 时间 Time leave;CarNode;/ 车辆信息结点 typedef struct NODE CarNode *stackMAX; int top;CarStack;/ 顺序栈模拟车站 typedef struct QNode/队列CarNode *data;QNode *next;QueueNode;/ 链队结点类型 typedef struct pqrtQueueNode *front,*rear;/ 设置头指针尾指针 LinkQueueCar;/ 模拟通道/ 初始化栈void InitStack(CarStack *cs);/ 初始化队列
12、 (便道 )int InitQueue(LinkQueueCar *qc);/ 车辆到达int Arrival(CarStack *Enter,LinkQueueCar *qc);/ 车辆离开void Leave(CarStack *Enter,CarStack *Temp,LinkQueueCar *qc); / 显示车库信息void List(CarStack s,LinkQueueCar w);void main()CarStack Enter,Temp; LinkQueueCar Wait; int ch;InitStack(&Enter);InitStack(&Tem
13、p);InitQueue(&Wait); while(1)cout<<" 欢迎光临 "<<endl; cout<<""<<endl;cout<<"1. 车辆到达 "<<endl; cout<<"2. 车辆离开 "<<endl; cout<<"3. 车场显示 "<<endl; cout<<"4. 退出程序 "<<endl; co
14、ut<<""<<endl;cout<<" 请选择所需的服务 !"<<endl; while(1) cin>>ch; if(ch>=1&&ch<=4) break; switch(ch)case 1:Arrival(&Enter,&Wait); break;case 2:Leave(&Enter,&Temp,&Wait); break;case 3:List(Enter,Wait);break;case 4:exit(0);bre
15、ak;default:break;void InitStack(CarStack *cs)cs->top=-1;/ 初始化栈 for(int i=0;i<MAX;i+) cs->stackcs->top=NULL;int InitQueue(LinkQueueCar *qc)/初始化队列/qc=(LinkQueueCar *)malloc(sizeof(LinkQueueCar); qc->front=(QueueNode *)malloc(sizeof(QueueNode); if(qc->front!=NULL)qc->front->next
16、=NULL;/ 带头结点的 qc->rear=qc->front;/ 一定要注意赋值顺序不能反了 ! return 1;else这句话不能要 ?return -1; /打印车站车离开的信息void Print(CarNode *p,int room)int A1,A2,B1,B2;/ 车辆收费cout<<" 请输入离开时间 :/*:*/"<<endl;cout<<" 请输入离开时间的时 (0-23):" cin>>p->leave.hour;while(p->leave.hour&l
17、t;p->reach.hour|p->leave.hour>23) cout<<"error!"<<endl;cin>>p->leave.hour;B1=p->leave.hour;cout<<" 请输入离开时间的分钟 (0-59):" cin>>p->leave.min;while(p->leave.min<0|p->leave.min>59) cout<<"error!"<<endl; c
18、in>>p->leave.min;B2=p->leave.min; cout<<endl<<" 离开汽车的车牌号为: "<<endl; puts(p->num);cout<<" 其到达时间为 :"<<p->reach.hour<<":"<<p->reach.min<<endl; cout<<" 其离开时间为 :"<<p->leave.hour<
19、<":"<<p->leave.min<<endl; A1=p->reach.hour;元"<<e ndl;A2=p->reach.min; cout<<" 应交费用为 :"<<(B1-A1)*60+(B2-A2)*price<<" free(p);int Arrival(CarStack *Enter,LinkQueueCar *qc)CarNode *p;QueueNode *t; p=(CarNode *)malloc(sizeof(C
20、arNode); cout<<" 请输入车牌号 ( 例 A8888):"<<endl; gets(p->num);if(Enter->top+1)<MAX)Enter->top+;cout<<" 车辆在车场第 "<<Enter->top<<" 位置 "<<endl; cout<<" 请输入到达时间 :/*:*/"<<endl;cout<<" 请输入到达时间的时 (0-2
21、3):" 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.min;Enter->stackEnter->top=p;/注意数组下标是从 0 开始,在显示时下标也要与之对应cout<&l
22、t;" 车近停车场成功 !"<<endl;return 1;elsecout<<" 该车需在便道上等待 !"<<endl;t=(QueueNode *)malloc(sizeof(QueueNode);/ t->data=p;t->next=NULL;qc->rear->next=t; qc->rear=t;cout<<" 车进便道成功 !"<<endl;return 1;void Leave(CarStack *Enter,CarStack *
23、Temp,LinkQueueCar *qc) CarNode *p,*t;QueueNode *q;int room;if(Enter->top>-1)/ 判断车场是否为空while(1)进队列cout<<" 请输入车在车场中的位置 cin>>room;if(room>=0&&room<=Enter->top) break;.H./while(Enter->top>room)/ 全部让路要离开的车后面还有车,则后面的车需进入临时栈给前面的车让路用 Enter->top 和 room 相比看你的车在
24、第几个位置,前面的几辆车需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(Temp->top>=0)让路完以后车再离开Enter->top+;Enter->stack
25、Enter->top=Temp->stackTemp->top;Temp->stackTemp->top=NULL;Temp->top-;cout<<" 临时车场里的车重新进站成功 !"<<endl;Print(p,room);/ 调用计费函数/ 车离开后如果便道上有车,也进车站 if(qc->front!=qc->rear&&Enter->top<MAX)/ 判断便道上是否有车以及车站是否已满q=qc->front->next;t=q->data;Ente
26、r->top+;cout<<" 便道上的 "<<t->num<<" 号车进入车场第 "<<Enter->top<<" 位置 "<<endl;cout<<" 请输入现在的时间 :/*:*/"<<endl;cout<<" 请输入到达时间的时 (0-23):"cin>>t->reach.hour;while(t->reach.hour<0|t-&g
27、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<<&qu
28、ot; 便道的车进入停车场成功 !"<<endl; elsecout<<" 便道里没有车 !"<<endl;elsecout<<" 车场里没有车 !"<<endl;void List1(CarStack *s)/ int i; if(s->top>-1) cout<<" 车场 "<<endl; cout<<" 位置 时间 车牌号 "<<endl; for(i=0;i<(s->
29、top+1);i+) cout<<" "<<i<<"显示车场信息"<<s->stacki->reach.hour<<":"<<s->stacki->reach.min<<""<<s->stacki->num<<endl;elsecout<<" 车场里没有车 !"<<endl;void List2(LinkQueueCar *w)/
30、显示便道信息QueueNode *p; p=w->front->next;/p if(w->front!=w->rear)/ cout<<" 等待车辆的号码为 :"<<endl; while(p)/ 用指针 p 遍历输出数据 先指向第一辆车,判断便道是否为空puts(p->data->num);p=p->next;elsecout<<" 便道里没有车 !"<<endl;void List(CarStack s,LinkQueueCar w)/ 显示整个停车场的信息i
31、nt flag,tag; flag=1; while(flag) cout<<" 请选择 1|2|3:"<<endl;cout<<"1.车场"<<" "<<"2. 便道"<<" "<<"3. 返回"<<endl; while(1)cin>>tag; if(tag>=1|tag<=3) break;elsecout<<" 请选择 1|2|
32、3:"<<endl;switch(tag)case 1:List1(&s);break;case 2:List2(&w); break;case 3:flag=0; break;default:break;五、程序运行情况(写出输入数据及运行结果)I m F:傲振结构谁钱ID e bu g'嚴戋exe第17页 共15页兀元元一 F1 2 3 4 5!h 桁第第第第第功2 痔入入入入入成4 S xala14Tiil4 6 其圭冃圭启主眉主Cf主庐井一 FUn a_nue丄r朗甜构环形lyj叽Dwbug讶形肽列圧KF=5束3 6堆華耋峯予素秦 八元元元
33、元元-R-l 2 3 4 5! 斬第第第第第功 時入入入入奋7 Mns& 以请请请请淫仍欢迎光临达开一省 到离显程 is ts12 3 4可的时0-23:5间的分5巧":關12 3 4达开一 lat 倒离显程 U请选择所需的服务?1请输入车牌号£例flflsss:A8888熬魯站置 擬场成功” 荻迎光;i宙请选择所曾1eh 區 ImsX £儼握结构停车场Wbu9<车堪芒2第23页 共15页|'3g型达S-=请选择所需的服务!1请输入车牌号C例爾氈阳:05陆£该4需在便道上等衛 圭31«企功 茨迎光临达fftat 到离显程 U请选择所需的服务!半:UTT" E:谧停车场DFbug谭车埼圧*请肃需的服石1请输入车牌号C例fi8888:£5&&t霞籲黠严茨血光临a到达3请选择1:2!3:车场2-便道囂返回0请&1!2!3:车扬霊便道3 返回2等待车辆的号码为:S5&66请选彳J1 !2 !3: 车趣霊便道返回1.时间5:07 = 0车牌号nssasR昭afe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能物流设备在电商行业的推广应用
- 数学建模实战应用题库
- 古道心理测试题及答案
- 地震局面试试题及答案
- 地理学面试题库及答案
- 2025年心理健康与教育专业入学考试试题及答案
- 2025年小学数学期末试题及答案
- 德育考试试题及答案
- 道路运输考试试题及答案
- 2025年农业气象学知识考试卷及答案
- 信访工作条例应知应会考试题库300题(含答案)
- 人工智能训练师(中级数据标注员)理论考试题库(含答案)
- 2024年广东清远连平县事业单位招聘工作人员51人公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
- 银行智能化方案设计
- 2024届四川省泸州市龙马潭区六年级语文小升初摸底考试含答案
- 40篇英语短文搞定3500个单词 正文
- 尿培养的健康宣教
- 《钢铁是怎样炼成的》选择题(含答案)
- 2024年中国融通文化教育集团有限公司招聘笔试参考题库含答案解析
- 煤矿井下安全避险六大系统 课件 项目五供水施救系统建设
- 局灶性大脑挫伤伴出血查房
评论
0/150
提交评论