主题:求救!求救!不会做的停车场
停车场管理
停车场是一个可停放N辆车的狭长通道,只有一个大门汽车在停车场内按车辆到达时间的先后,由北向南排列, 如停车常内已停满车,则后来的汽车只能在门外的便道上等侯一旦有车开走,则排在便道上第一辆车即可开入,当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它开路,待该辆车开出大门外,其他车辆再按原次序进入车场,没辆车停放在车场的车在踏离开车场时必须按它停留的时间交付费用 以栈模拟停车场,以队列模拟车场外的便道,栈以顺序结构实现,队列以链表结构实现 许另设一个栈临时停放为给要离开的汽车让路而从停车场退下来的汽车
输入:
汽车到达或离开,用A和D表示;车牌号码;到达和离开的时间 以下是一个输入例子:(‘a’,1,5)(‘a’2,10),(‘d’,1,15)(‘a’,3,20)
(‘a’4,25),(‘d’,2,35)(‘e’,0,0)
输出:
如是到达,则输出汽车在停车厂的停车位置;如是离开,则输出汽车在停车场内的停留的时间和应交的费用(在便道上停留的时间不收费)
本人写的程序如下:
#include<iostream.h>
#include<malloc.h>
typedef int elemtype;
typedef int status;
#define OK 1
#define ERROR 0
#define maxlen 2
#define NULL 0
typedef struct sqstact
{
elemtype num[maxlen];
elemtype time[maxlen];
elemtype top;
}stack;
typedef struct QNode
{
elemtype num;
elemtype time;
struct *next;
}Que,*Queueptr;
typedef struct Queptr
{
Queueptr front;
Queueptr rear;
}LinkQueue;
void initstack(stack &st)
{
st.top=0;
}
int push(stack &st,elemtype x,elemtype y)
{
if (st.top==maxlen-1)
{
cout<<"栈上溢出"<<endl;
return 0;
}
else
{
st.top++;
st.num[st.top]=x;
st.time[st.top]=y;
cout<<"车牌为"<<x<<"的汽车的停车位置是"<<st.top<<endl;
return OK;
}
}
int pop(stack &st)
{
elemtype x,y;
if (st.top==0)
{
cout<<"栈下溢出"<<endl;
return 0;
}
else
{
x=st.num[st.top];
y=st.time[st.top];
st.top--;
return OK;
}
}
void InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=(Queueptr )malloc(sizeof(Que));
if(!Q.front)
{
return ;
}
else
Q.front->next=NULL;
return ;
}
void EnQueue(LinkQueue &Q,elemtype x,elemtype y)
{
Queueptr p;
p=(Que *)malloc(sizeof(Que));
if(!p) { cout<<"In Queue Error !"<<endl; return ;}
p->num=x;
p->time=y;
p->next=NULL;
Q.rear=p;
return ;
}
status DeQueue(LinkQueue &Q)
{
elemtype x, y;
Queueptr p;
if(Q.front->next ==Q.rear->next )
return ERROR;
p= Q.front ;
x= Q.front->num;
y= Q.front->time;
if( Q.rear ==p)
Q.rear->next =Q.front->next ;
free(p);
return OK;
}
void car_park()
{
int n=0;
char a;
elemtype b,c,d,money=2;
stack st1, st2;
LinkQueue Q;
InitQueue(Q);
initstack(st1);
initstack(st2);
cin>>a>>b>>c;
while(a!='e')
{
if(a=='a')
{
if(n<maxlen&&Q.front==Q.rear)
{
push(st1,b,c);
n++;
}
else
{EnQueue(Q,b,c)}
}
else if (a=='d')
{
while(st1.num[st1.top]!=b)
{
push(st2,st1.num[st1.top],st1.time[st1.top]);
pop(st1);
}
d=st1.time[st1.top];
cout<<"停车时间为:"<<d<<"分钟"<<endl<<"应付"<<(c-d)*money<<"元"<<endl;
pop(st1);
while(st2.top!=0)
{
push(st1,st2.num[st2.top],st1.time[st2.top]);
pop(st2);
}
if(Q.front!=Q.rear)
{
push(st1,Q.front->num,c);
DeQueue(Q);
}
n--;
}
cin>>a>>b>>c;
}
return ;
}
int main()
{
cout<<"欢迎使用停车场管理系统"<<endl;
cout<<" a表示到达 "<<endl;
cout<<" d表示离开 "<<endl;
cout<<" e表示输入结束 "<<endl;
cout<<"请输入数据"<<endl;
car_park();
return OK;
}
为什么我的结果回进入死循环?结果也是错的,帮帮忙呀!~~~~~谢谢了!!!!!
如果可以能不能说出我错误的原因?
停车场是一个可停放N辆车的狭长通道,只有一个大门汽车在停车场内按车辆到达时间的先后,由北向南排列, 如停车常内已停满车,则后来的汽车只能在门外的便道上等侯一旦有车开走,则排在便道上第一辆车即可开入,当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它开路,待该辆车开出大门外,其他车辆再按原次序进入车场,没辆车停放在车场的车在踏离开车场时必须按它停留的时间交付费用 以栈模拟停车场,以队列模拟车场外的便道,栈以顺序结构实现,队列以链表结构实现 许另设一个栈临时停放为给要离开的汽车让路而从停车场退下来的汽车
输入:
汽车到达或离开,用A和D表示;车牌号码;到达和离开的时间 以下是一个输入例子:(‘a’,1,5)(‘a’2,10),(‘d’,1,15)(‘a’,3,20)
(‘a’4,25),(‘d’,2,35)(‘e’,0,0)
输出:
如是到达,则输出汽车在停车厂的停车位置;如是离开,则输出汽车在停车场内的停留的时间和应交的费用(在便道上停留的时间不收费)
本人写的程序如下:
#include<iostream.h>
#include<malloc.h>
typedef int elemtype;
typedef int status;
#define OK 1
#define ERROR 0
#define maxlen 2
#define NULL 0
typedef struct sqstact
{
elemtype num[maxlen];
elemtype time[maxlen];
elemtype top;
}stack;
typedef struct QNode
{
elemtype num;
elemtype time;
struct *next;
}Que,*Queueptr;
typedef struct Queptr
{
Queueptr front;
Queueptr rear;
}LinkQueue;
void initstack(stack &st)
{
st.top=0;
}
int push(stack &st,elemtype x,elemtype y)
{
if (st.top==maxlen-1)
{
cout<<"栈上溢出"<<endl;
return 0;
}
else
{
st.top++;
st.num[st.top]=x;
st.time[st.top]=y;
cout<<"车牌为"<<x<<"的汽车的停车位置是"<<st.top<<endl;
return OK;
}
}
int pop(stack &st)
{
elemtype x,y;
if (st.top==0)
{
cout<<"栈下溢出"<<endl;
return 0;
}
else
{
x=st.num[st.top];
y=st.time[st.top];
st.top--;
return OK;
}
}
void InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=(Queueptr )malloc(sizeof(Que));
if(!Q.front)
{
return ;
}
else
Q.front->next=NULL;
return ;
}
void EnQueue(LinkQueue &Q,elemtype x,elemtype y)
{
Queueptr p;
p=(Que *)malloc(sizeof(Que));
if(!p) { cout<<"In Queue Error !"<<endl; return ;}
p->num=x;
p->time=y;
p->next=NULL;
Q.rear=p;
return ;
}
status DeQueue(LinkQueue &Q)
{
elemtype x, y;
Queueptr p;
if(Q.front->next ==Q.rear->next )
return ERROR;
p= Q.front ;
x= Q.front->num;
y= Q.front->time;
if( Q.rear ==p)
Q.rear->next =Q.front->next ;
free(p);
return OK;
}
void car_park()
{
int n=0;
char a;
elemtype b,c,d,money=2;
stack st1, st2;
LinkQueue Q;
InitQueue(Q);
initstack(st1);
initstack(st2);
cin>>a>>b>>c;
while(a!='e')
{
if(a=='a')
{
if(n<maxlen&&Q.front==Q.rear)
{
push(st1,b,c);
n++;
}
else
{EnQueue(Q,b,c)}
}
else if (a=='d')
{
while(st1.num[st1.top]!=b)
{
push(st2,st1.num[st1.top],st1.time[st1.top]);
pop(st1);
}
d=st1.time[st1.top];
cout<<"停车时间为:"<<d<<"分钟"<<endl<<"应付"<<(c-d)*money<<"元"<<endl;
pop(st1);
while(st2.top!=0)
{
push(st1,st2.num[st2.top],st1.time[st2.top]);
pop(st2);
}
if(Q.front!=Q.rear)
{
push(st1,Q.front->num,c);
DeQueue(Q);
}
n--;
}
cin>>a>>b>>c;
}
return ;
}
int main()
{
cout<<"欢迎使用停车场管理系统"<<endl;
cout<<" a表示到达 "<<endl;
cout<<" d表示离开 "<<endl;
cout<<" e表示输入结束 "<<endl;
cout<<"请输入数据"<<endl;
car_park();
return OK;
}
为什么我的结果回进入死循环?结果也是错的,帮帮忙呀!~~~~~谢谢了!!!!!
如果可以能不能说出我错误的原因?