用栈实现停车位,队列实现便道,出现问题如下所示
代码
#define MAX_STOP 5 //停车场里能停放的汽车的数目的最大数目
#define MAX_PAVE 100 //便道上能停放的汽车的数目的最大数目
typedef struct Car
{
char *license_plate;
char state;
}Car;
typedef struct Stopping //顺序结构 主栈
{
Car STOP[MAX_STOP]; //各汽车信息的储存空间
int top; //用来指示栈顶位置的静态指针
}Stopping;
typedef struct Pavement //顺序结构队列
{
Car PAVE[MAX_PAVE]; //各汽车信息的储存空间
int front,rear; //用来指示队头和队尾的静态指针
}Pavement;
Stopping*init_stopping()
{
Stopping*s;
s = (Stopping*)malloc(sizeof(Stopping));
s->top = -1;
for (int i = 0; i < MAX_STOP; i++) //使用循环语句分别为的汽车这个元素赋值初始化
{ s->STOP[i].license_plate="null"; //当这辆车没有停在停车场的时候它的牌照初始化为null
s->STOP[i].state='n'; //车没有停到这个位置的时候,把汽车信息的状态赋值为n
}
return s;
}
//初始化停车栈位
Pavement*init_pavement()
{
Pavement*p;
p = (Pavement*)malloc(sizeof(Pavement)); //开辟空间
p->front=p->rear=-1; //使队首和队尾的静态的指针初始化为-1
for(int i=0;i<MAX_PAVE;i++) //利用循环给队列的元素附初始化的值
{
p->PAVE[i].license_plate=""; //初始化为空
p->PAVE[i].state='n'; //初始化为n
}
return p;
}
//初始化便道队列
void come(Pavement*p, Stopping*q)
{
char car[10];
printf("\n请输入车牌号\n");
scanf("%s", &car);
p->rear++;
p->PAVE[p->rear].license_plate = car;
p->PAVE[p->rear].state = 'p';
if (q->top == 4)
{
printf("停车场的车子已经满了不能进入停车场,对你带来的不便请见谅\n");
printf("我将把你的车子停到便道去,一旦有空的车位,马上给你停进去\n");
}
else
{
q->top++;
q->STOP[q->top].license_plate = p->PAVE[p->rear].license_plate;
q->STOP[q->top].state = 's';
printf("牌照为%s的汽车进入停车场的%d号车位\n", q->STOP[q->top].license_plate, (q->top + 1));
}
for (int i = 0; i <= q->top; i++)
{
printf("%d车位----%s\n", (i + 1), q->STOP[i].license_plate);
}
}
//汽车进入停车位
出现上图这种情况