(2) 输入数据模拟管理过程,数据(入或出,车号)。
#ifndef __PARK_H__ #define __PARK_H__ #define TRUE 1 #define FALSE 0 #define SIZE 11 typedef struct _cardata { int id; char num[20]; char name[10]; int time; }CarData; typedef struct _parkqueue { CarData data[SIZE]; int parkfront; int parkrear; }ParkQueue; typedef struct _waitnode { CarData data; struct _waitnode *next; }WaitNode; typedef struct _waitqueue { WaitNode *waitfront; WaitNode *waitrear; }WaitQueue; typedef struct _stacknode { CarData data; struct _stacknode *next; }StackNode; typedef struct _linkStack { StackNode *top; }LinkStack; int InitParkQueue(ParkQueue *parkq); int ParkQueueFull(ParkQueue *parkq); int ParkQueueEmpty (ParkQueue *parkq); int EnParkQueue(ParkQueue *parkq,CarData x); int DeParkQueue(ParkQueue *parkq,CarData *x); WaitQueue* Create_Queue(); int WaitQueueEmpty(WaitQueue *waitq); int EnWaitQueue(WaitQueue *waitq,CarData x); int DeWaitQueue(WaitQueue *waitq,CarData *x); LinkStack *Create_Stack(); int StackEmpty(LinkStack *s); int Push(LinkStack *s,CarData x); int Pop(LinkStack *s,CarData *x); int park(ParkQueue *parkq,WaitQueue *waitq,CarData x); void display(ParkQueue *parkq,WaitQueue *waitq); void face(); #endif // __PARK_H__ #include "park.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> int InitParkQueue(ParkQueue *parkq) { if(parkq == NULL) return FALSE; parkq->parkfront = 0; parkq->parkrear = 0; return TRUE; } int ParkQueueFull(ParkQueue *parkq) { if(parkq == NULL) return FALSE; return parkq->parkfront == (parkq->parkrear + 1) % SIZE; } int ParkQueueEmpty (ParkQueue *parkq) { if (parkq == NULL) return FALSE; return parkq->parkfront == parkq->parkrear; } int EnParkQueue(ParkQueue *parkq,CarData x) { if(parkq == NULL) return FALSE; if(ParkQueueFull(parkq)) return TRUE; parkq->parkrear = (parkq->parkrear + 1) % SIZE; parkq->data[parkq->parkrear] = x; return TRUE; } int DeParkQueue(ParkQueue *parkq,CarData *x) { if (parkq == NULL) return FALSE; if (ParkQueueEmpty(parkq)) return FALSE; parkq->parkfront = (parkq->parkfront + 1) % SIZE; *x = parkq->data[parkq->parkfront]; return TRUE; } WaitQueue* Create_Queue() { WaitQueue * waitq = (WaitQueue*)malloc(sizeof(WaitQueue)/sizeof(char)); if (waitq == NULL) return NULL; waitq->waitfront = NULL; waitq->waitrear = NULL; return waitq; } int WaitQueueEmpty(WaitQueue *waitq) { if (waitq == NULL) return FALSE; return waitq->waitfront == NULL; } int EnWaitQueue(WaitQueue *waitq,CarData x) { if (waitq == NULL) return FALSE; WaitNode * waitnode = (WaitNode*)malloc(sizeof(WaitNode)/sizeof(char)); if (waitnode == NULL) return FALSE; waitnode->data = x; waitnode->next = NULL; if (waitq->waitfront == NULL) { waitq->waitfront = waitnode; waitq->waitrear = waitnode; } else { waitq->waitrear->next = waitnode; waitq->waitrear = waitnode; } return TRUE; } int DeWaitQueue(WaitQueue *waitq,CarData *x) { if (waitq == NULL) return FALSE; if (WaitQueueEmpty(waitq)) return FALSE; WaitNode *p = waitq->waitfront; *x = p->data; waitq->waitfront = p->next; free(p); if (waitq->waitfront == NULL) waitq->waitrear = NULL; return TRUE; } LinkStack *Create_Stack() { LinkStack* s = (LinkStack*)malloc(sizeof(LinkStack)/sizeof(char)); if (s == NULL) return NULL; s->top = NULL; return s; } int StackEmpty(LinkStack *s) { if (s == NULL) return FALSE; return s->top == NULL; } int Push(LinkStack *s,CarData x) { if (s == NULL) return FALSE; StackNode* snode = (StackNode*)malloc(sizeof(StackNode)/sizeof(char)); if (snode == NULL) return FALSE; snode->data = x; snode->next = s->top; s->top = snode; return TRUE; } int Pop(LinkStack *s,CarData *x) { if (s == NULL) return FALSE; if (StackEmpty(s)) return FALSE; StackNode *p = s->top; *x = p->data; s->top = p->next; free(p); return TRUE; } int park(ParkQueue *parkq,WaitQueue *waitq,CarData x) { if(parkq == NULL || waitq == NULL) return FALSE; if(ParkQueueFull(parkq)) { EnWaitQueue(waitq,x); printf("车位已满,进入等候队列!\n"); } else { EnParkQueue(parkq,x); printf("成功停车,进入停车队列!\n"); } return TRUE; } void display(ParkQueue *parkq,WaitQueue *waitq) { if(parkq == NULL || waitq == NULL) return; printf("停车队列-----------------------------------\n"); int tmp1 = parkq->parkfront; do { tmp1 = (tmp1 + 1) % SIZE; printf("Mss