一. 问题描述 设有一个可以停放 n 辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的先后顺序,依次从停车场最里面向大门口处停放。如果停车场已放满 n 辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短来交费。如果停留在便道上的车未进入停车场就要离去,允许其离开,不收停车费。试为停车场编制按上述要求进行管理的模拟程序。 二.基本要求 要求程序输出每辆车到达后的停车位置(停车场或便道),以及某辆车离开停车场时应该交纳的费用和它在停车场内停留的时间和应缴纳的费用。 三. 需求分析 停车场采用栈式结构,停车场外的便道采用队列结构(即便道就是等候队列)。停车场的管理流程如下: ①当车辆要进入停车场时,检查停车场是否已满,如果未满则车辆进栈(车辆进入停车场);如果停车场已满,则车辆进入等候队列(车辆进入便道等候)。 ②当车辆要求出栈时,该车到栈顶的那些车辆先弹出栈(在它之后进入的车辆必须先退出车场为它让路),再让该车出栈,其他车辆再按原次序进栈(进入车场)。当车辆出栈完毕后,检查等候队列(便道)中是否有车,有车则从队列头取出一辆车压入栈中。 四.详细设计 1.本程序主要包含四个模块 1) 主程序模块 int main(){ Initialization(); CarNode car; SqStack Park,TempPark; LinkQueue Q; InitStack(Park); InitStack(TempPark); InitQueue(Q); while((scanf("%c%d%d",&car.event,&car.num,&car.time))&&(car.event!='e'&&car.event!='E')) { getchar(); //除去输入结束时的回车 switch(car.event) { case 'A': case 'a':Arrive(Park,Q,car);break; case 'D': case 'd':Leave(Park,TempPark,Q,car);break; default: printf("您的第一个数据输入有误!\n");break; } } printf("程序结束,谢谢使用!\n"); return 0; 2)分别构造空栈和空队列 栈:Status InitStack(SqStack &S){ //构造一个空栈 S.Stacksize=0; S.base=(CarNode*)malloc((MAX)*sizeof(CarNode)); if(!S.base){ exit(OVERFLOW); printf("存储空间分配失败"); } S.top=S.base; return OK; } 队列...