综合性实验:停车场管理程序

/**
*    实验题目:
*        停车场管理程序
*    实验目的:
*        深入掌握栈和队列应用的算法设计
*    实验内容:
*        设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
*    汽车在停车场内按车辆到达时间的先后顺序,依次由南向北排列(大门在最北端,最
*    先到达的第一辆车停放在车场的最南端),若车场内已停满n辆车,则后来的汽车只能
*    在门外的便道即候车场上等候,一旦有车开走,则排在便道上的第一辆车即可开入;
*    当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车
*    开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时
*    必须按它停留的时间长短交纳费用。
*    用栈模拟停车场,用队列模拟车场外的便道,按照从键盘获候车场中的车辆:104取的数据序列进行模拟管理。
*    每一组输入数据包括3个数据项:汽车到达(1)或者离开(2)、汽车牌照号码以及到达或者
*    离开的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车
*    在停车场内或便道上的停车位置;若是车辆离开,则输出汽车在停车场内停留的时间和
*    应交纳的费用(在便道上停留的时间不收费)。注意:栈采用顺序存储结构,队列采用环形
*    队列。
*        还需设一个临时栈,用于临时停放为要给离开的汽车让路而从停车场退出来的汽车,
*    也用顺序结构实现。
*    用户输入的命令有以下5种:
*    1、汽车到达
*    2、汽车离开
*    3、输出停车场中的所有汽车牌号
*    4、输出候车场中的所有汽车牌号
*    5、退出系统
*/

#include <stdio.h>
#include <malloc.h>
#include <stdbool.h>

#define N 3 // 停车场内最多的停车数
#define M 4 // 候车场内最多的停车数入队
#define PRICE 2 // 每单位停车费用

/*---------------------停车场:栈采用顺序存储结构--------------------*/
typedef struct
{
    int car_no[N]; // 车牌号
    int car_time[N]; // 进场时间
    int top; // 栈顶指针
}SqStack; // 声明顺序栈类型

/*------------------------候车场:队列采用环形队列-------------------*/
typedef struct
{
    int car_no[M]; // 车牌号
    int que_front; // 队头指针
    int que_rear; // 队尾指针
}SqQueue; // 声明环形队列类型

/*------------------------栈的运算算法-------------------*/
/*------------------------初始化栈-------------------*/
static void init_stack(SqStack *&s) // 指针的引用
{
    s = (SqStack *)malloc(sizeof(SqStack)); // 动态分配存储空间
    s->top = -1;
}

/*------------------------判断栈空-------------------*/
static bool stack_empty(SqStack *s)
{
    return (s->top == -1);
}

/*------------------------判断栈满-------------------*/
static bool stack_full(SqStack *s)
{
    return (s->top == N - 1);
}

/*------------------------压栈-------------------*/
static bool push(SqStack *&s, int car_no, int car_time)
{
&n

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值