数据结构 停车场管理报告
更新时间:2023-08-28 05:39:01 阅读量: 教育文库 文档下载
- 数据结构推荐度:
- 相关推荐
实验二:停车场管理(栈和队列应用)
班级 学号 姓名 一、实验目的
1 掌握队列和栈顺序存储结构和链式存储结构,以便在实际背景下灵活运用。
2 掌握栈和队列的特点,即先进后出与先进先出的原则。
3 掌握栈和队列的基本运算。
二、实验内容
1 问题描述
设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚,依次从停车场最里面向大门口处停放。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短来交费。如果停留在便道上的车未进入停车场就要离去,允许其离开,不收停车费,并且仍然保持在便道上等待的车辆次序。编制一个程序模拟该停车场的管理。
2 实现要求
要求程序输出每辆车到达后的停车位置(停车场或便道),以及某辆车离开停车场时应该交纳的费用和它在停车场内停留的时间。
3 实现提示
汽车的模拟输入信息格式可以为:(到达/离开,汽车牌照号码,到达/离开的时间)。用栈和队列来模拟停车场和便道。
三、实验结果:
头文件
#define MAXSIZE 3
#define price 0.4
typedef struct time {
int hour;
int min;
}Time;
typedef struct car {
char num[10];
Time reach;
Time leave;
}CarNode;
typedef struct SNode {
CarNode *data1[MAXSIZE+1];
int top;
}SeqStackCar;
typedef struct QNode {
CarNode *data2;
struct QNode *next;
}QueueNode;
typedef struct LQNode {
QueueNode *front;
QueueNode *rear;
}LinkQueueCar;
void InitStack(SeqStackCar *s);
int InitQueue(LinkQueueCar *Q);
void Display(CarNode *p,int place);
int Arrival(SeqStackCar *s,LinkQueueCar *LQ);
void Leave1(SeqStackCar *s1,SeqStackCar *s2,LinkQueueCar *LQ);
void Leave2(LinkQueueCar *LQ);
void List1(SeqStackCar *s);
void List2(LinkQueueCar *LQ);
源文件
#include "car.h"
#include<iostream>
using namespace std;
int i=0;
void InitStack(SeqStackCar *s)
{
int i;
s->top=0;
for(i=0;i<=MAXSIZE;i++)
s->data1[s->top]=NULL;
}
int InitQueue(LinkQueueCar *Q)
{
Q->front=new QueueNode;
if(Q->front!=NULL)
{ Q->front->next=NULL;
Q->rear=Q->front;
return 1;
}
else
return 0;
}
void Display(CarNode *p,int place)
{
int A1,A2,B1,B2,time;
cout<<"请输入离开的时间:";
cin>>p->leave.hour;cin>>p->leave.min;
while(p->leave.hour<p->reach.hour||p->leave.hour>23)
{
cout<<"error!"<<endl;
cout<<"请输入离开的时间:";
cin>>p->leave.hour;cin>>p->leave.min;
}
cout<<endl;
cout<<"离开车辆的车牌号为:";cout<<p->num<<endl;
cout<<"其到达时间为: "<<p->reach.hour<<":"<<p->reach.min<<endl;
cout<<"其离开时间为: "<<p->leave.hour<<":"<<p->leave.min<<endl;
A1=p->reach.hour;
A2=p->reach.min;
B1=p->leave.hour;
B2=p->leave.min; time=(B1-A1)*60+(B2-A2); cout<<"该车停在停车场中的时间:"<<time<<"分钟!"<<endl; cout<<"应交费用为: "<<time*price<<"元!"<<endl;
cout<<endl;
}
int Arrival(SeqStackCar *s,LinkQueueCar *LQ)
{
CarNode *p;
QueueNode *t;
p=new CarNode;
cout<<"请输入车牌号(例:A1234):";cin>>p->num;
if(s->top<MAXSIZE)
{
s->top++;
cout<<"车辆在车场第"<<s->top <<"位置!"<<endl;
cout<<"请输入到达时间:";
cin>>p->reach.hour;cin>>p->reach.min;
while(p->reach.hour<0||p->reach.hour>23||p->reach.min<0||p->reach.min>59) {
cout<<"error!"<<endl;
cout<<"请输入到达时间:";
cin>>p->reach.hour;cin>>p->reach.min;
}
s->data1[s->top]=p;
return 1;
}
else
{ cout<<"该车停在便道上!"<<endl;
t= new QueueNode;
t->data2=p;
t->next=NULL;
LQ->rear->next=t;
LQ->rear=t;
i++;
cout<<"车辆在便道"<<i<<"个位置!"<<endl;
return 1;
}
}
void Leave1(SeqStackCar *s1,SeqStackCar *s2,LinkQueueCar *LQ)
{
int place;
CarNode *p,*t;
QueueNode *q;
if(s1->top>0)
{ while(1) { } cout<<"请输入车在车场的位置1--"<<s1->top<<":"; cin>>place; if(place>=1&&place<=s1->top) break;
while(s1->top>place) {
s2->top++;
s2->data1[s2->top]=s1->data1[s1->top];
s1->data1[s1->top]=NULL;
s1->top--;
}
p=s1->data1[s1->top];
s1->data1[s1->top]=NULL;
s1->top--;
while(s2->top>=1)
{ s1->top++;
s1->data1[s1->top]=s2->data1[s2->top];
s2->data1[s2->top]=NULL;
s2->top--;
} Display(p,place); if((LQ->front!=LQ->rear)&&s1->top<MAXSIZE) {
q=LQ->front->next;
t=q->data2;
s1->top++;
cout<<"便道的"<<t->num<<"号车进入车场第"<<s1->top<<"位置!"<<endl; cout<<"请输入到达的时间:"; cin>>t->reach.hour;cin>>t->reach.min; if(t->reach.hour<0||t->reach.hour>23||t->reach.min<0||t->reach.min>59) { } cout<<"error!"<<endl; cout<<"请输入到达时间:"; cin>>t->reach.hour;cin>>t->reach.min; LQ->front->next=q->next; if(q==LQ->rear) LQ->rear=LQ->front; s1->data1[s1->top]=t; delete q;
}
else
cout<<"便道里没有车!"<<endl;
}
else
cout<<"停车场里没有车!"<<endl;
}
void Leave2(LinkQueueCar *LQ)
{
QueueNode *q;
CarNode *t;
if(LQ->front!=LQ->rear) { q=LQ->front->next; t=q->data2; LQ->front->next=q->next; if(q==LQ->rear) LQ->rear=LQ->front; delete q; cout<<"便道上车牌号为"<<t->num<<"的车从便道上离开!"<<endl; } else cout<<"便道里没有车!"<<endl;
}
void List1(SeqStackCar *s)
{
int i;
if(s->top>0)
{
cout<<" 位置 到达时间 车牌号"<<endl;
for(i=1;i<=s->top;i++)
} { } cout<<" "<<i<<" "<<s->data1[i]->reach.hour <<":"<<s->data1[i]->reach.min<<" "<<s->data1[i]->num<<endl;
else
cout<<"停车场里没有车!"<<endl;
}
void List2(LinkQueueCar *LQ)
{
QueueNode *p;
p=LQ->front->next;
if(LQ->front!=LQ->rear)
{ cout<<"便道上车的车牌号为:"<<endl;
while(p!=NULL)
{
cout<<p->data2->num<<endl;
p=p->next;
}
}
else
cout<<"便道上没有车!"<<endl;
}
测试文件
#include "car.h"
#include<iostream>
using namespace std;
void main()
{
SeqStackCar s1,s2;
LinkQueueCar LQ; int m;
InitStack(&s1);
InitStack(&s2);
InitQueue(&LQ);
while(1)
{
cout<<"★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl; cout<<"1.车辆到达 2.离开停车场3.离开便道 4.停车场列表 5.便道列表 6.退出系统"<<endl; cout<<"★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl; cin>>m;
switch(m)
{
case 1:Arrival(&s1,&LQ);break;
case 2:Leave1(&s1,&s2,&LQ);break;
case 3:Leave2(&LQ);break;
case 4:List1(&s1);break;
case 5:List2(&LQ);break;
case 6:exit(0);
default: break;
}
}
运行结果:(两
个图表联在一
起)
}
四、实验总结
1.学会了栈和队列的综合使用,更加灵活运用栈和队列。
2.栈的特点是后进先出,所以用栈实现停车场的程序。
3.队列的特点是先进先出,所以用队列实现便道的程序。
4.参数为指针时主函数形参的形式。
5.栈与队列的数据为车的信息,写函数时要注意车的信息与栈和队列相结合。
6.出栈时可以增加一个辅助栈,来保存信息。
正在阅读:
数据结构 停车场管理报告08-28
Solidworks工程图转CAD图纸06-05
榆林市兰炭产业发展调研报告11-04
高三基本能力音乐试题汇总04-26
聆听音乐目录中英对照09-16
浅析怎样进行初中历史立德树人教学11-26
平顶山市“根”文化资源03-12
2005年上海物理高考试卷评析06-15
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 数据结构
- 停车场
- 报告
- 管理
- 2011年聊城政府工作汇报Microsoft Word 文档
- 应急救援重要物资清单20131209
- 2010~2014年自考00452教育统计与测量试题答案历年试题及答案汇总
- 善用课文材料作文
- 2013中医执业医师中医妇科学复习重点(13)
- 河海大学弹性力学徐芝纶版 第八章
- 长袜子皮皮_阅读题
- 2013学校党委工作总结
- 【股票指标公式下载】-【通达信】大盘顶底(大顶、绝顶)
- 山东农村信用社考试试题大全(1)
- 【名师点睛】七年级数学上册 一元一次方程计算题练习 50题(含答案)
- 新员工安全教育试卷C答案
- 【英语专题推荐】小学英语全能总复习小升初模拟试卷A卷
- 中国煤炭运输行业市场前瞻与未来投资战略分析报告2016-2020年
- 宽带多媒体卫星通信系统组网技木(上)
- 2019年四川大学生物材料工程研究中心613无机及分析化学(含仪器分析)之无机化学考研冲刺五套模拟题
- 简历正文
- 中国大陆林木遗传育种学科1949_2003年的研究历程
- 古籍修复人才培养之我见
- 商务谈判课程论文