用栈实现停车位,队列实现便道,出现问题如下所示
代码
#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); } } //汽车进入停车位
p->PAVE[p->rear].license_plate = (char *)malloc(sizeof(char) * 10);
strcpy(p->PAVE[p->rear].license_plate, car);