#include<iostream>
using namespace std;
struct stack
{
int num;
int time;
int top;
stack *base;
};
struct stack1
{
int num1;
int time1;
int top1;
stack1 *base1;
};
struct queue1
{ queue1 *next;
int qnum;
int qtime;
};
queue1 *now,*front,*rear;
stack pop(stack &s)
{
s.top--;
return s.base[s.top+1];
}
void push(stack &s,int a,int b)
{
s.top++;
s.base[s.top].num=a;
s.base[s.top].time=b;
cout<<"位置是:停车场内的"<<s.top+1<<"位"<<endl;
}
void push1(stack1 &s1,int a,int b)
{
s1.top1++;
s1.base1[s1.top1].num1=a;
s1.base1[s1.top1].time1=b;
}
stack1 pop1(stack1 &s)
{
s.top1--;
return s.base1[s.top1+1];
}
void stackpush(stack &s,int a,int b)
{
s.top++;
s.base[s.top].num=a;
s.base[s.top].time=b;
}
void manage()
{
stack car;
car.top=-1;
stack1 car1; car1.top1=-1;
int n;
bool full=0;bool lw=0;
int k=1;
cout<<"请输入停车场车位数"<<endl;
cin>>n;
car.base=new stack[n];
int i=1;//车辆总数+1
char ad;
cout<<"请输入a--进入 b--离开 e--结束"<<endl;
while(cin>>ad&&ad!='e')
{
if(i==1&&ad=='e')
{
cout<<"停车场内没有车辆"<<endl;
break;
}
if(ad=='a')
{
if(i<=n)
{
int cnum;int ctime;
cin>>cnum>>ctime;
push(car,cnum,ctime);
i++;
continue;
}
if(i==n+1)
{
front=new queue1;
cin>>front->qnum>>front->qtime;
now=rear=front;
rear->next=NULL;
cout<<"位置是:在便道上的"<<i-n<<"位"<<endl;
i++;
continue;
}
if(i>n+1)
{
rear=new queue1;
cin>>rear->qnum>>rear->qtime;
now->next=rear;
rear->next=NULL;
now=now->next;
cout<<"位置是:在便道上的"<<i-n<<"位"<<endl;i++;
continue;
}
}
if(ad=='d')
{
if(i==1){cout<<"停车场内没有车辆"<<endl;continue;}
lw=0;bool full=0;bool ext=0;stack1 ca11;stack ca;
i--;
int carnum,cartime;
cin>>carnum>>cartime;
int j=car.top;int len;len=car.top;
if(i<=n)
{ while(carnum!=car.base[j].num)
{j--;if(j<0){full=1;break;}}
if(full==1){cout<<"停车场内没有此车"<<endl;i++;continue;}
if(cartime<car.base[j].time){cout<<"输入时间错误,请重新输入"<<endl;i++;continue;}
car1.base1=new stack1[car.top-j+1];
for(int k=j;j<=len;j++)
{
ca=pop(car);
push1(car1,ca.num,ca.time);
}
ca11=pop1(car1);
cout<<"停车时间"<<cartime-ca11.time1<<" "<<"停车费用"<<cartime-ca11.time1<<endl;
while(car1.top1>-1)
{ ca11=pop1(car1);
stackpush(car,ca11.num1,ca11.time1);
}
delete []car1.base1;
continue;
}
while(carnum!=car.base[j].num)
{ j--;if(j<0){lw=1;break;}
}
if(lw==0) {
if(cartime<car.base[j].time){cout<<"输入时间错误,请重新输入"<<endl;i++;continue;}
}
if(lw==1)//要走的车辆在便道上
{
if(front->qnum==carnum)
{ if(front->qtime>cartime){cout<<"输入时间错误,请重新输入"<<endl;i++;continue;}
queue1 *m1;
m1=front;
if(front->next==NULL)m1=front;
else
front=m1->next;
delete m1;
cout<<"收费0元"<<endl;
continue;
}
queue1 *m3;
now=front;
if(now->next==NULL&&now->qnum!=carnum)
{cout<<"停车场内没有此车"<<endl;i++;continue;}
while(now->next&&now->next->qnum!=carnum)
now=now->next;
if(now->next==NULL){
m3=now;if(m3->qnum!=rear->qnum)
{cout<<"停车场内没有此车"<<endl;i++;continue;}
}
else m3=now->next;
if(m3==rear)
{ if(m3->qtime>cartime){cout<<"输入时间错误,请重新输入"<<endl;i++;continue;}
rear=now;
rear->next=NULL;
delete m3;
cout<<"收费0 元"<<endl;
continue;
}
if(m3->qtime>cartime){cout<<"输入时间错误,请重新输入"<<endl;i++;continue;}
now->next=m3->next;
delete m3;
cout<<"收费0 元"<<endl;
continue;
}
car1.base1=new stack1[car.top-j+1];
for(int k=j;j<=len;j++)
{
ca=pop(car);
push1(car1,ca.num,ca.time);
}
ca11=pop1(car1);
cout<<"停车时间"<<cartime-ca11.time1<<" "<<"停车费用"<<cartime-ca11.time1<<endl;
while(car1.top1>-1)
{ ca11=pop1(car1);
stackpush(car,ca11.num1,ca11.time1);
}
front->qtime=cartime;
stackpush(car,front->qnum,front->qtime);
queue1 *m;
m=front;
front=m->next;
delete m;
delete []car1.base1;
continue;
}
}
}
int main()
{
manage();
return 0;
}