1、 停车场管理 一、一、 课程设计题目内容课程设计题目内容 (1)问题描述: 设停车场是一个可停放 n 辆汽车的狭长通道,且只有一个大门可供汽车进 出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最 南端,最先到达的第一辆车停放在车场的最北端) ,若车场内已停满 n 辆汽车, 则后来的汽车只能在门外的便道上等待,一旦有车开走,则排在便道上的第一辆 车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场 为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车 场的车在它离开停车场时必须按它停留的时间长短交纳费用。 试为停车场编制按 上述要求进行管
2、理的模拟程序。 基本要求: 以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序 列进行模拟管理。每一组输入数据包括三个数据项:汽车到达或离去信 息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出 信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆 离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间 不收费) 。栈以顺序结构实现,队列以链表结构实现。 测试数据: 设 n=2,输入数据为: (A,1,5),(A,2,10),(D,1,15),(A,3,20),(A,4,25),( A,5,30),(D,2,35),(D,4
3、,40),(E,0,0)。其中:A表示到达 (Arrival) ;D表示(Departure) ;E表示输入结束(End) 。 实现提示: 需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车, 也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示 一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。 二、二、 本人完成的工作本人完成的工作 (1) 定义车辆信息结构体,包括汽车的车牌号码、到达停车场时间、离开停车 场时间; (2) 定义顺序堆栈的结构体,用于模拟停车场; (3) 定义链式队列的结构体,用于模拟车场外的停车场; (4) 定义堆栈和队列的初始化
4、函数; (5) 设计汽车进入停车场、离开停车场、离开收费信息和汽车停靠情况查询等 主要函数; (6) 主函数:设计停车场管理菜单,通过菜单选项,调用相关的函数来实现停 车场汽车到达登记、汽车离开停车场、汽车停靠查询和退出程序的操作, 完成模拟汽车停车场的整个过程。 三、三、 所采用的数据结构所采用的数据结构 数据结构的定义: typedef struct car /定义车辆信息的结构体 long CarNo; /车牌号 int Atime; /车到达时间 int Dtime; /车离开时间 CarNode; typedef struct node /定义模拟停车场的顺序堆栈 CarNode s
5、tackMaxsize+1; /栈底不存放元素,即停车场共有 Masize 个 位置 int top; /栈顶指针 StackCar; typedef struct qnode /用队列结点定义,构造停车场外的单个等候车辆 CarNode data; /数据域 struct qnode *next; /指针域 QNode; typedef struct Node /用队列定义,构造停车场外的等候便道 QNode *front; /队头指针 QNode *rear; /队尾指针 LinkQueue; 四、四、 所设计的函数所设计的函数 1)void StackInitiate(StackCar
6、*s) /堆栈初始化 s-top=0; /栈顶置 0 初始方法:初始化顺序栈,只需令栈顶的下标值置为 0 即可。 程序框图: 堆栈的初始化(s) s-top=0 初始化成功! 2)LinkQueue *Init_LinkQueue(void)/链队列的初始化 LinkQueue *Q;QNode *p; p=(QNode *)malloc(sizeof(QNode) ; /* 开辟头结点 */ p-next=NULL; Q=(LinkQueue *)malloc(sizeof(LinkQueue);/* 开辟链队的指针结点 */ Q-front=Q-rear=p; return(Q) ; 初始方法:开辟一个队列的头结点 p,其 next 指针为空,再开辟链队的指针结 点 Q,用 p 来初始化链队结点的队头指针和队尾指针。初始化成功后,返回 Q 程序框图: