问题描述:
停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;
当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。
1.基本要求
(1)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
(2)每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
(3)栈以顺序结构实现,队列以链表实现。
2.重点难点
重点:针对停车场问题的特点,利用栈的后进先出特点,选择栈这种数据结构来模拟停车场,利用队列先进先出的特点,选择队列这种数据结构来模拟车场外的便道。
难点:离散事件问题的模拟算法设计与求解。
源码分享:
#include<windows.h>
#include<iomanip>
#include<conio.h>
#include<cstdio>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#define PARKING_MAXSIZE 4
#define lisence_length 10
using namespace std;
float price_hour;
float profit=0;
//汽车的信息
typedef struct
{
float hour;
float minute;
}time;
typedef struct
{
char lisence[lisence_length];
time time_enter;
time time_exit;
}car_info;
/
typedef struct{ //顺序栈
car_info a[PARKING_MAXSIZE];
int top;
}SStack;
typedef struct Node
{
car_info data; // 元素数据
struct Node *next; // 链式队列中结点元素的指针
}QNode, *QueuePtr;
typedef struct
{
QueuePtr front; // 队列头指针
QueuePtr rear; // 队列尾指针
}LinkQueue;
SStack InitStack(SStack b){
b.top=0;
return b;
}
int NotEmpty(SStack *b){
if(b->top==0)