#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define SIZE 10
#define Price 2
//停车场
typedef int ParkData;
typedef struct _park
{
ParkData CarNo[SIZE]; //车牌号
ParkData CarTime[SIZE]; //时间
int top;
}Park;
int InitPark(Park *p)
{
if(p==NULL)
{
return FALSE;
}
p->top=-1;
}
int ParkEmpty(Park *p)
{
if(p==NULL)
{
return FALSE;
}
return p->top==-1;
}
int ParkFull(Park *p)
{
if(p==NULL)
{
return FALSE;
}
return p->top==(SIZE-1);
}
int Push(Park *p,ParkData x,ParkData y)
{
if(p==NULL)
return FALSE;
if(ParkFull(p))
return FALSE;
p->CarNo[(p->top)+1]=x;
p->CarTime[(p->top)+1]=y;
p->top++;
return TRUE;
}
int Pop(Park *p,ParkData *x,ParkData *y)
{
if(p==NULL)
return FALSE;
if(ParkEmpty(p))
return FALSE;
*x=p->CarNo[p->top];
*y=p->CarTime[p->top];
p->top–;
return TRUE;
}
void DisPark(Park *p)
{
int i;
for(i=p->top;i>=0;i–)
{
printf(“%d\t”,p->CarNo[i]);
}
printf(“\n”);
}
//候车列
typedef int QueueData;
typedef struct _queue
{
QueueData CarNo[SIZE]; 车号
int front;
int rear;
}Queue;
int InitQueue(Queue *q)
{
if(q==NULL)
return FALSE;
q->front=q->rear=0;
return TRUE;
}
int QueueEmpty(Queue *q)
{
if(q==NULL)
return FALSE;
return q->front==q->rear;
}
int QueueFull(Queue *q)
{
if(q==NULL)
return FALSE;
return q->front==(q->rear+1)%SIZE;
}
int EnQueue(Queue *q,QueueData x)
{
if(q==NULL)
return FALSE;
if(QueueFull(q))
return FALSE;
q->rear=(q->rear+1)%SIZE;
q->CarNo[q->rear]=x;
return (int)q;
}
int DeQueue(Queue *q,QueueData *x)
{
if(q==NULL)
return FALSE;
if(QueueEmpty(q))
return FALSE;
q->front=(q->front+1)%SIZE;
*x=q->CarNo[q->front];
return TRUE;
}
int DisQueue(Queue *q)
{
if(q==NULL)
return FALSE;
if (QueueEmpty(q))
return FALSE;
int i;
i=(q->front+1)%SIZE;
printf(“%d”,q->CarNo[i]);
while((q->rear-i+SIZE)%SIZE>0)
{
i=(i+1)%SIZE;
printf(“%d\t”,q->CarNo[i]);
}
printf(“\n”);
return TRUE;
}
int main()
{
int choice;
int carno,cartime;
int x,y;
int i,j,t;
Park p,p1;
Queue q;
InitPark(&p);
InitPark(&p1);
InitQueue(&q);
do
{
printf(“请输入指令(1:停车 2:离开 3:显示停车场 4:显示候车场 0:退出):”);
scanf(“%d”,&choice);
switch(choice)
{
case 1: //汽车到达
printf(“输入车号和时间:”);
scanf(“%d,%d”,&carno,&cartime);
if(!ParkFull(&p)) //停车场不满
{
Push(&p,carno,cartime);
printf(” >>停车位置:%d\n”,p.top+1);
}
else //停车场满了
{
if(!QueueFull(&q)) //候车不满
{
EnQueue(&q,carno);
printf(” >>候车位置:%d\n”,q.rear);
}
else //候车满了
printf(” >>候车场已满,不能停车\n”);
}
break;
case 2: //汽车离开
printf(“输入车号和时间:”);
scanf(“%d,%d”,&carno,&cartime);
for(i=0;i<=p.top&&p.CarNo[i]!=carno;i++); //在栈中查找要离开的车号
if(i>p.top)
printf(” >>无该编号的汽车\n”);
else
{
t=p.top-i; //需要出栈的车辆的数目
for(j=0;j<t;j++)
{
Pop(&p,&x,&y);
Push(&p1,x,y); //进让车栈
}
Pop(&p,&x,&y); //汽车离开
printf(” >>%d汽车停车费用:%d\n”,carno,(cartime-y)*Price);
while(!ParkEmpty(&p1)) //让车栈的车重回停车栈
{
Pop(&p1,&x,&y);
Push(&p,x,y);
}
if(!QueueEmpty(&q)) //候车列不空,队头进栈
{
DeQueue(&q,&x);
Push(&p,x,cartime);
}
}
break;
case 3: //显示停车场情况
if(!ParkEmpty(&p))
{
printf(” >>停车场的车辆:”);
DisPark(&p);
}
else
printf(” >>停车场没有车\n”);
break;
case 4: //显示候车场情况
if(!QueueEmpty(&q))
{
printf(” >>候车场的车俩:”);
DisQueue(&q);
}
else
printf(” >>候车场没有车\n”);
break;
case 0: //结束
if(!ParkEmpty(&p))
{
printf(” >>停车场的车辆:”);
DisPark(&p);
}
if(!QueueEmpty(&q))
{
printf(” >>候车场的车俩:”);
DisQueue(&q);
}
break;
default:
printf(” >>输入的指令错误\n”);
break;
}
}
while(choice!=0);
return 0;
}
不喜勿喷!!!