#include<iostream>
#include<cstring>
using namespace std;
const int stacksize = 3;
struct parkstack {
int parkdata [stacksize+1];
int top;
char name[10];
};
struct node {
int data;
node *next;
};
void init_pstack (parkstack &s) {
s.top = 0;
}
void push_pstack (parkstack &s, int x) {
if (s.top == stacksize) {
cerr<<"上溢。"<<endl;
return;
} else {
s.top++;
s.parkdata[s.top] = x;
cout<<x<<"号车进入"<<s.name<<endl;
}
}
int pop_pstack (parkstack &s) {
if (s.top == 0) {
cerr<<"下溢。"<<endl;
return 0;
} else {
int a;
a= s.parkdata[s.top];
s.top--;
cout<<a<<"号车离开"<<s.name<<endl;
return a;
}
}
bool empty_pastack (parkstack s) {
if (s.top ==0) return true;
else return false;
}
int top_pastack (parkstack s) {
return s.parkdata[s.top];
}
void show(parkstack s) {
int a;
cout<<"parkstack:";
for(int i=1; i<=s.top; i++) {
cout<<" "<<s.parkdata[i];
}
cout<<endl;
}
void fout(int n,parkstack ps, parkstack ts)
{
bool out;
int temp;
int number=n;
while (! empty_pastack (ps) && (top_pastack(ps) != number)) {
temp = top_pastack (ps);
pop_pstack (ps);
push_pstack(ts, temp);
}
if (empty_pastack(ps)) cout<<"停车场无此汽车。"<<endl;
else {
cout<<pop_pstack(ps)<<endl;
out = true;
}
while (!empty_pastack(ts)) {
temp = top_pastack(ts);
pop_pstack(ts);
push_pstack(ps, temp);
}
cout<<"finished"<<endl;
}
void order(int a,int b,int c,parkstack ps, parkstack ts)
{
push_pstack (ps, 1);
push_pstack (ps, 2);
push_pstack (ps,3);
fout(a,ps,ts);
fout(b,ps,ts);
fout(c,ps,ts);
}
void manage( ) {
parkstack ts, ps;
bool out;
int temp, number;
char ch;
init_pstack (ts);
strcpy(ts.name,"临时车库");
init_pstack (ps);
strcpy(ps.name,"停车场");
out = false;
while(true) {
cin>>ch;
if (number > 0) {
switch(ch) {
case 'F': {
show(ps);
break;
}
case 'D': {
cout<<"1:"<<endl;
order(1,2,3,ps,ts);
cout<<"2:"<<endl;
order(1,3,2,ps,ts);
cout<<"3:"<<endl;
order(2,1,3,ps,ts);
cout<<"4:"<<endl;
order(2,3,1,ps,ts);
cout<<"5:"<<endl;
order(3,1,2,ps,ts);
cout<<"6:"<<endl;
order(3,2,1,ps,ts);
}
}
}
}
}
int main() {
manage();
}