else
break;
}
}
3.
#include
#include
constintStackSize=2;//定义停车场栈的容量
constdoubleprice=0.05;//定义停车场,单位时间的停车的价格
typedefstructnode
{
intnum;
intreach;
intleave;
}CarNode;//定义汽车结点
typedefstructsqst
{
CarNodedata[StackSize];
inttop;
}SqStack;//定义顺序栈(包括停车场栈和临时栈)
typedefstructQnode
{
CarNodedata;
structQNode*next;
}QType;//定义汽车结点
typedefstructqptr
{
QType*front,*rear;
}LinkQueue;//定义汽车链队
voidInitStack(SqStack&st)//初始化顺序栈
{
st.top=-1;
}
voidInitQueue(LinkQueue*&lq)//初始化链队(带头结点)
{
lq=(LinkQueue*)malloc(sizeof(LinkQueue));
lq->front=(QType*)malloc(sizeof(QType));
lq->front->next=NULL;
lq->rear=lq->front;
}
voidArrival(SqStack&park,LinkQueue*&lq)//车辆到达,入停车场顺序栈或便道链队
{
CarNodecar;
cout<<"请输入车牌号:
";
cin>>car.num;
if(park.top!
=StackSize-1)//停车场未满,车辆进入停车场(进入停车场栈)
{
cout<<"请输入到达时间:
";
cin>>car.reach;
park.top++;
cout<<"车辆在车场第"<<(park.top+1)<<"个位置."<park.data[park.top]=car;//把这个车辆的信息记录入栈
}
else//停车场已满,车进便道(进入便道链队)
{
cout<<"该车须在便道等待!
"<QType*s=(QType*)malloc(sizeof(QType));
s->data=car;
s->next=NULL;
if(lq->front==lq->rear)
{
lq->front->next=s;
lq->rear=s;
}
else
{
lq->rear->next=s;
lq->rear=s;
}
}
}
voidLeave(SqStack&park,SqStack&temp,LinkQueue*&lq)//车辆离开停车场,出停车场顺序栈
{
intplace;
CarNodeLeaveCar,InsideCar;
QType*s;
if(park.top>=0)//停车场有车
{
cout<<"请输入车在车场的位置(1--"<<(park.top+1)<<")";
cin>>place;
while(park.top>place-1)//如果该车后面有其他车,将该车后面的车依次入到临时栈)
{
temp.top++;
temp.data[temp.top]=park.data[park.top];
park.top--;
}
LeaveCar=park.data[park.top];//要离开的车出栈
park.top--;
while(temp.top>=0)//将临时栈中的车辆重新入到停车场栈中
{
park.top++;
park.data[park.top]=temp.data[temp.top];
temp.top--;
}
cout<<"请输入离开的时间:
";
cin>>LeaveCar.leave;
cout<<"离开车辆的车牌号为:
"<cout<<"其到达时间为:
"<"<cout<<"应交费用为:
"<<(LeaveCar.leave-LeaveCar.reach)*price<<"元"<if((lq->front!
=lq->rear)&&(park.top!
=StackSize-1))//便道的车辆进入停车场
{
s=lq->front->next;
InsideCar=s->data;
park.top++;
cout<<"便道上的车牌号为:
"<InsideCar.reach=LeaveCar.leave;
lq->front->next=s->next;
if(s==lq->rear)//如果将便道上的车进入停车场后,便道上已经没有车
lq->rear=lq->front;
park.data[park.top]=InsideCar;//把车辆信息记录进车库
free(s);
}
else
cout<<"便道里没有车."<}
else
cout<<"停车场里没有车."<}
voidList1(SqStackst)//列表显示停车场车辆信息
{
inti;
if(st.top>=0)//判断停车场内是否有车
{
cout<<"车场:
"<cout<<"位置车牌号到达时间"<for(i=0;i<=st.top;i++)
{
cout<<(i+1)<<"";
cout<cout<}
}
else
cout<<"停车场里没有车"<}
voidList2(LinkQueue*lq)//列表显示便道车辆信息
{
QType*p=lq->front->next;
if(lq->front!
=lq->rear)//判断便道上是否有车
{
cout<<"便道上车辆的号码为:
"<while(p!
=NULL)
{
cout<<(p->data.num)<p=p->next;
}
}
else
cout<<"便道上没有车."<}
voidList(SqStackst,LinkQueue*lq)//显示停车场栈和便道链队中的车辆信息
{
inttag,flag=1;
while(flag==1)
{
cout<<"\n请选择:
1|2|3:
"<cout<<"1.查看停车场内的车辆信息;\n2.查看便道上的车辆信息;\n3.返回到程序主界面."<while
(1)
{
cin>>tag;
if(tag>=1||tag<=3)
break;
else
cout<<"请选择:
1|2|3:
";
}
switch(tag)
{
case1:
List1(st);break;//显示停车场车辆信息
case2:
List2(lq);break;//显示便道车辆信息
case3:
flag=0;break;
default:
break;
}
}
}
voidmain()
{
SqStackpark,temp;//栈park是模拟停车场,栈temp临时存放从停车场栈中退出来的车辆
LinkQueue*wait;//便道链队
charch;//定义程序控制信息
InitStack(park);//初始化停车场栈
InitStack(temp);//初始化临时栈
InitQueue(wait);//初始化便道链队
while
(1)
{
cout<<"\n'A'表示车辆到达;"<cout<<"'D'表示车辆离开;"<cout<<"'E'表示程序结束;"<cout<<"'L'显示栈和队列中车辆信息."<while
(1)
{
cin>>ch;//从键盘输入控制信息,
if(ch=='A'||ch=='D'||ch=='E'||ch=='L')
break;
else
cout<<"请输入:
'A'|'D'|'L'|'E'"<}
switch(ch)
{
case'A':
Arrival(park,wait);break;
case'D':
Leave(park,temp,wait);break;
case'L':
List(park,wait);break;
case'E':
exit(0);break;
default:
break;
}
}
}
一、程序运行情况(写出输入数据及运行结果)
1.
2.
3.