#includeiostream#includestringusingnamespacestd;constintMAX_STOP=4;//定义停车场最大停车数constintMAX_PLATE=10;//定义车牌号最大长度//数据结构定义//定义存储汽车信息的结构体typedefstruct{charlicense_plate[MAX_PLATE];//汽车牌照号码,定义为一个字符指针类型charstate;//汽车当前状态,字符p表示停放在停车位上,字符s表示停放在便道上,每辆车的初始状态用字符i来进行表示}CAR;//定义模拟停车场的栈结构typedefstruct{CARSTOP[MAX_STOP];//汽车信息的存储空间inttop;//用来指示栈顶位置的静态指针}SeqStack;//定义模拟便道的队列结构typedefstructnode{CARWAIT;//汽车信息的存储空问structnode*next;//用来指示队列位置的动态指针}QNode;//链队列节点的类型//定义链队列的收尾指针typedefstruct{QNode*front,*rear;}LQueue;//将头尾指针封装在一起的链队//函数声明intEmpty_LQueue(LQueue*q);//判队空intLeaveCheck(SeqStackparking,char*license_plate);//检查离开的车是否在停车场中intQueueLength(LQueue*q);//判队长度intOut_LQueue(LQueue*&sidewalk,char*license_plate);//出队操作intStackEmpty(SeqStackparking);//判断栈是否为空intStackFull(SeqStackparking);//判断栈是否为满intStackPop(SeqStack&parking);//出栈操作intStackTop(SeqStackparking,char*license_plate);//取栈项元素voidCar_come(SeqStack&parking,LQueue*&sidewalk);//有车到来时的操作voidCar_leave(SeqStack&parking,LQueue*&sidewalk);//有车离开的操作voidDisplay(SeqStackparking);//显示停车场内的所有信息调试时用voidInitStack(SeqStack&parking);//初始化栈voidInitList(LQueue*&sidewalk);//初始化队列voidIn_LQueue(LQueue*&sidewalk,char*license_plate);//进队操作voidInput_Check(char*license_plate);////检验输入的车牌是否合法voidStackPush(SeqStack&parking,char*license_plate);//进栈操作voidmain(){//定义变量SeqStackparking;LQueue*sidewalk=NULL;char*choice=newchar;intflag=1;//定义一个变量判断是否退出//初始化一个为空的停乍场InitStack(parking);//初始化一个为空的便道InitList(sidewalk);//运行界面及功能选择while(flag){cout停车场模拟管理系统endl;cout**************************************************endl;cout\t有车到来时请按[C]键endlendl;cout\t有车要走时请按[l]键endlendl;cout\t查看停车场请按[D]键endlendl;cout\t要退出系统请按[Q]键endlendl;cout**************************************************endl;cout请选择操作:;gets(choice);if(1!=strlen(choice)){cout请正确输入选项!;continue;}else{switch(*choice){case'c':case'C':{Car_come(parking,sidewalk);break;}case'l':case'L':{Car_leave(parking,sidewalk);break;}case'q':case'Q':{flag=0;break;}case'd':case'D':{Display(parking);break;}default:cout选择不正确!请重新选择endl;}}}}//有车到来时的操作voidCar_come(SeqStack&parking,LQueue*&sidewalk){//定义变量charlicense_plate[MAX_PLATE];cout请输入车辆的车牌号码:;Input_Check(license_plate);//判断停车场是否已满,满则进入便道,不满进入停车场if(StackFull(parking)){In_LQueue(sidewalk,license_plate);//进入便道cout停车场已满清在便道等候,您的位置为QueueLength(sidewalk)endl;}else{StackPush(parking,license_plate);//进入停车场cout请进入停车场中的parking.top+1号停车位endl;}}//有车离开时的操作voidCar_leave(SeqStack&parking,LQueue*&sidewalk){//定义变量SeqStacktmpparking;//定义临时停车场charleave_license_plate[MAX_PLATE];//要离开的车牌号charlicense_plate[MAX_PLATE];//存放从停车场中读出来的车牌信息InitStack(tmpparking);//初始化临时停车场//判断停车场中是否有车if(StackEmpty(parking)){cout当前停车场中没有车endl;return;//退出子函数}cout请输入要离开的车牌照:;Input_Check(leave_license_plate);cout当前停车场中有parking.top+1辆车endl;if(LeaveCheck(parking,leave_license_plate))//判断车是否在停车场中{//车在停车场中cout您的车在LeaveCheck(parking,leave_license_plate)号车位上endl;while(StackTop(parking,license_plate)&&(strcmp(parking.STOP[parking.top].license_plate,leave_license_plate)!=0)){strcpy(parking.STOP[parking.top].license_plate,license_plate);cout牌照为license_plate的车暂时退出停车场parking.top+1号位endl;StackPush(tmpparking,license_plate);//停车场中的车暂时退出进入临时停车场StackPop(parking);//出栈}cout牌照为license_plate的车离开停车场parking.top+1号位endl;StackPop(parking);//出栈//将临时停车场巾的车停回停车场while(StackEmpty(tmpparking)!=1){StackTop(tmpparking,license_plate);StackPush(parking,license_plate);cout牌照为license_plate的车进入停车场parking.top+1号位endl;license_plate[0]='\0';StackPop(tmpparking);if(parking.top+1==MAX_STOP-1)//判断车离开前停车场是否停满if(QueueLength(sidewalk))//如果停满则判断便道上是否有车{//便道中有车则从便道中停入停车场Out_LQueue(sidewalk,license_plate);//出队StackPush(parking,license_plate);//入栈cout在便道中牌照为license_plate的车进入停车场parking.top+1号endl;}else//车不在停车场中cout您的车不在停车场中!endl;}}}//初始化顺序栈voidInitStack(SeqStack&parking){parking.top=-1;}intStackEmpty(SeqStackparking){if(parking.top==-1)return1;elsereturn0;}//判栈满intStackFull(SeqStackparking){if(parking.top==MAX_STOP-1)return1;elsereturn0;}//入栈voidStackPush(SeqStack&parking,char*license_plate){parking.top++;strcpy(parking.STOP[parking.top].license_plate,license_plate);parking.STOP[parking.top].state='p';}//出栈返回栈顶指针intStackPop(SeqStack&parking){if(StackEmpty(parking))return0;elsereturnparking.top--;}intStackTop(SeqStackparking,char*license_plate){if(StackEmpty(parking))return0;else{strcpy(license_plate,parking.STOP[parking.top].license_plate);return1;}}//显示所有voidDisplay(SeqStackparking){if(parking.top==-1)cout停车场为空endl;else{while(parking.top!=-1){cout车牌号为:parking.STOP[parking.top].license_plate;cout,停在parking.top+1号车位上endl;parking.top--;}}}//初始化队列voidInitList(LQueue*&sidewalk){sidewalk=(LQueue*)malloc(sizeof(LQueue));sidewalk-front=sidewalk-rear=NULL;}//入队voidIn_LQueue(LQueue*&sidewalk,char*license_plate){QNode*car_on_sidewalk;car_on_sidewalk=(QNode*)malloc(sizeof(QNode));//为新节点开辟新空问strcpy(car_on_sidewalk-WAIT.license_plate,license_plate);//将数据写入节点car_on_sidewalk-WAIT.state=