栈和队列的应用之停车问题
题目:
设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若停车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入停车场;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场;每辆停放在车场的车在它离开停车场时,必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序
基本要求:
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入数据的序列进行模拟管理.每一组输入数据包括三个数据:汽车的“到达”(’A’表示)或“离去”(’D’表示)信息,汽车标识(牌照号)以及到达或离去的时刻.对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或者便道上的停车位置;若是车辆离去,则输出汽车在停车场停留的时间和应缴纳的费用(便道上不收费).栈以顺序结构实现,队列以链表结构实现
测试数据
设 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’ 表示到达(Arrival),’D’表示离开(Departure),’E’表示结束(End)
时间为相对分钟数.用C++编的程序,还要有头文件!
代码:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
typedef struct SL{
int id[100];
int time[100];
int top;
}SL;
//顺序栈入栈
void Push(SL &S, int x, int y){
S.top++;
S.id[S.top] = x;
S.time[S.top] = y;
}
//进站
void input(int MAX, int id, int time, SL &S, SL &Sb){
//cout << "2";
if(S.top == MAX-1){
Sb.top++;
Sb.id[Sb.top] = id;
cout << "车牌号是" << Sb.id[Sb.top] << "的车在便道的位置是" << Sb.top+1+1 << endl;
}else{
Push(S, id ,time);
cout << "车牌号是" << S.id[S.top] << "的车在停车场的位置是" << S.top+1 << endl;
}
}
//出站
void output(int id, int time, SL &S, int MAX, int Money, SL &Sb){
SL S1;
S1.top = -1;
while(1){
if(id == S.id[S.top]){
cout << "车牌号是" << id << "的车在停车场停留的时间为" << time-S.time[S.top] << "小时,共花费了" << (time-S.time[S.top])*Money << "元" << endl;
S.top--;
break;
}else{
S1.top++;
S1.id[S1.top] = S.id[S.top];
S1.time[S1.top] = S.time[S.top];
S.top--;
}
}
}
int main(){
SL S,Sb;
S.top = -1;//停车场
Sb.top = -1;//便道
int MAX,Money;
cout << "请输入停车场最大容量(辆)以及车在停车场每小时的费用(元):" << endl;
cin >> MAX >> Money;
char n;
int id,time;
cout << "请输入车的状态(A进站/D出站),车牌号以及时间(进站时间/出站时间):" << endl;
while(1){
cin >> n >> id >> time;
switch(n){
case 'a':
case 'A':
//cout << "1";
input(MAX,id,time,S,Sb);
break;
case 'd':
case 'D':
output(id,time,S,MAX,Money,Sb);
break;
case 'e':
case 'E':
exit(0);
default:
cout << "状态信息输入有误!!!" << endl;
}
}
return 0;
}
还没有评论,来说两句吧...