一.实验目的:
了解栈和队列的逻辑结构和基本操作,实现栈和队列的基本功能。
通过实验进一步理解栈和队列的逻辑结构和存储结构,进一步提高使用理论知识指导解决实际问题的能力。 二.实验内容:
题目:模拟停车厂管理 问题描述:
设停车厂只有一个可停放几辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达的先后顺序依次排列,若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可进入;当停车场内某辆车要离开时,由于停车场是狭长的通道,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门后,为它让路的车辆再按原次序进入车场。在这里假设汽车不能从便道上开走。
基本要求:
以栈模拟停车场,以队列模拟车场外的便道,按照从终端输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出车辆在停车场内或便道上的停车位置;若是车辆离去,则输出车辆在停车场内停留的时间和应缴纳的费用(在便道上停留的时间不收费)。栈以顺序结构出现,队列以链表结构实现。
测试数据:
(1)连续有7辆车到来,牌照号分别为JF001、JF002、JF003、JF004、、JF005、JF006、JF007,前5辆车应该进入停车位1-5车位,第6、7辆车应停入便道的1、2位置上。
(2)(1)中的情况发生后,让牌照号为JF003的汽车从停车厂开走,应显示JF005、JF004的让路动作和JF006从便道到停车位上的动作。
(3)随时检查停车位和便道的状态,不应该出现停车位有空位而便道上还有车的情况。
(4)程序容错性的测试,当按键输入错误的时候是否有错误提示给用户指导用户正确操作,并作出相应处理保证程序健康的运行。 三. 实验方案(程序设计说明)
(一) 算法设计思路
1. 车辆进入; 进入车库(栈),若车库已满,进入便道(队列); 2. 车辆离开;
输入要离开车辆信息,从栈顶开始查找,若信息不对应,把此车放入临时车库(临时栈)中;若相等,就输出车辆离开信息; 3. 重新把车库填满;
把临时车库中的车辆重新放入车库,若便道中存在车辆,将便道中的车辆放入车库中一辆; 4. 显示车库车辆信息; 遍历栈(顺序栈),输出车辆信息; 5. 显示便道车辆信息; 遍历队列(链队),输出车辆信息; 6. 用菜单贯穿整个程序的实现。
(二)流程图
1
开始 菜单显示 输入要进行操作的序号 3.车库车辆信息 1.车辆进入 0.退出 2.车辆离开 4.便道车辆信息 输出信息 输入车牌号 从车库底层开始查找 Y 栈满? 输出信息 N 信息符合? N 放入便道 Y 放入栈中 top++; 输出信息 存放在临时栈中 top++ 临时栈中车辆放入车库 便道空? N Y 往车库中放一辆
结束 2
(三)界面设计说明 1.显示主菜单
1、车辆进入 2、车辆离开 3、车库车辆信息 4、便道车辆信息 0、退出
2.根据选择进入相应界面 1、车辆进入 输入车牌号、进入时间进行入库操作 2、车辆离开
手动输入车牌号码进行查找,并计算费用
3、车库车辆信息
显示当前车库中所有车辆的信息 4、便道车辆信息
显示当前便道中所有车辆的信息
0、退出
(四)使用模块及变量的说明 p->当前车库(顺序栈) q->临时车库(顺序栈) s->便道(链队)
四. 实验步骤或程序(经调试后正确的源程序)#include \#include \#include \#include \#define N 5 using namespace std;
typedef struct news
3
{ string number; //车牌号 string place; //停放位置
double intime; //进入时间
}News, *Carnews;
typedef struct //顺序栈 { News Car[N];
int top;
}SeqStack;
typedef struct node //链队 { News Car;
struct node *next;
}QNode; typedef struct {
QNode *front, *rear;
}LQueue;
void ComeNew2(LQueue *q); void Menu() {
4