题目:模拟旅馆管理系统的一个功能——床位的分配与回收
⒈ 问题描述:
某旅馆有n个等级的房间,第I等级有 个房间,每个等级有个床位(1≤I≤n)。试模拟旅馆管理系统中床位分配和回收的功能,设计能为单个旅客分配床位,在其离店便回收床位(供下次分配)的算法。
⒉ 基本要求
(1)输入数据
分配时,输入旅客姓名、年龄、性别、到达日期和所需房间等级。
回收时,输入房间等级、房间号和床位号。
2)输出数据
分配成功时打印旅客姓名、年龄、到达日期、房间等级、房间号码和床位号码。
分配不成功时,如所有等级均无床位,则打印“客满”信息;如旅客需要的等级均无空床位,则打印“是否愿意更换等级?”的询问信息。若旅客愿意更换,则重新输入有关信息,再进行分配,否则分配工作结束。
⒊ 实现提示
(1)数据结构
主要采用顺序结构链接结构的线性表及堆栈。
a) 每个房间用一个如下所示的具有五个字段的结点(房结点)表示:
性别 |
房间号 |
现有空床数 |
BTOP |
RLINK |
其中,性别:0表示房间为空状态
1表示房间分配给女旅客
2表示房间分配给男旅客
现有空床数:数据在0~ 之间,其中是第I等级一个房间 的床位数,当现有空床数为时,表示房间为空;为0时,表示房间满。
RLINK:当房间空时,用作空房栈的连接;当房间不空时,指向下一个房结点。
BTOP:指向该房间的空床号栈栈顶。一个房间对应一个顺序表示的空床号栈。栈的容量为,栈中存放空床号。分配时,从栈顶取出空床号,栈顶下移(BTOP=BTOP+1);回收时,栈顶上移(BTOP=BTOP-1),将回收的空床号填入栈顶。
每一个等级中的空房间构成一个空房栈;已住旅客的房间构成一个链栈(简称房链),其头结点结构如下:
可分配女床位总数 |
可分配男床位总数 |
TTOP |
RLINK |
其中::第I等级中房间总数
第I等级中每个房间的床位数
可分配男、女床位的总数的初值等于* ,因为开始时所有房间和床位既可以分配给男旅客,也可以分配给女旅客。当在房链中分配一个床位给男(女)旅客,床位总数应减1;当从空房栈中取出一个房间作为男(女)旅客房间时,则可分配女(男)床位总数应减,当回收一个男(女)床位时,则可分配男(女)床位总数应加1;当回收一个男(女)空房至空房栈时,则可分配女(男)床位总数应加。
TTOP:指向本级空房栈栈顶,当无空房间时,TTOP=^(NIL)。
RLINK:指向本级房链第一个顶点,当房链为空时,RLINK=^(NIL)
顺序表s=(),其中,顺序存放第1~n等级房间的头结点;
存放内容如下所示:
全店可分配女床总数 |
全店可分配女床总数 |
0 |
0 |
^ |
^ |
初始时,全店可分配男、女床总数相同,均为 ,在分配或回收时,对各等级可分配男(女)床位总数处理的同时也要对全店可分配男(女)床总数作相应处理,当全店可分配男(女)床总数等于零时,表示客满。
(2)算法设计思想(略)