数据结构 停车场管理

这是一个使用栈和队列数据结构模拟的停车场管理系统。程序接收车辆到达和离开信息,根据车辆到达和离开时间进行管理,输出车辆位置及离开时的费用。在停车场满员时,车辆会在外部队列等待。离开时,后续车辆需退出为离开车辆让路。
摘要由CSDN通过智能技术生成

一、需求分析

功能需求:

停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等待,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在他离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。

界面需求:

输入停车场能停放的车辆数量和每小时收费价格。再输入车辆的进入/离开情况,车牌号和进入/离开时间,输出车辆的位置和离开停车场时所需的费用。

二、概要设计

概要设计

接口设计

void push(int flag, struct stackstruct *p)
struct stackstruct *pop(int id, int time,int money)// 弹出一个元素,找和离开车牌相同的车,找到则输出费用,返回空,否则返回弹出的元素
struct stackstruct *pop1()//弹出临时栈的一个元素并返回
void Enqueue(struct stackstruct *p)// 停车场满,入队列操作
struct stackstruct *Dequeue(int time) //出队列操作,返回弹出的元素

数据结构设计

struct stackstruct                     /*栈的结构体*/
{
   
	int id;//记录车牌
	int time;//记录进入时间
	struct stackstruct *pre;
	struct stackstruct *next;
};

struct queuestruct                    /*队列的结构体*/
{
   
	int id;
	struct queuestruct *next;
};

三、详细设计

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
struct stackstruct                     /*栈的结构体*/
{
   
	int id;//记录车牌
	int time;//记录进入时间
	struct stackstruct *pre;
	struct stackstruct *next;
};

struct queuestruct                    /*队列的结构体*/
{
   
	int id;
	struct queuestruct *next;
};

struct stackstruct *stackhead1, *stackend1;
struct stackstruct *stackhead2, *stackend2;
struct queuestruct *queuehead, *queueend;
int stack1count, stack2count;                         /*栈中元素总数*/
int queuecount;                         /*队列中元素总数*/

void push(int flag, struct stackstruct *p)
{
   
	struct stackstruct *stack;      //临时结点
	if (flag == 0)                  /*栈1进栈操作*/
	{
   
		if (stack1count == 0)
		{
   //是第一个结点
			stackhead1 = (struct stackstruct *)malloc(sizeof(struct stackstruct)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值