admin 管理员组

文章数量: 1086019


2024年4月28日发(作者:商城系统服务好得)

一、设计目的

1.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;

2.初步掌握软件开辟过程的问题分析、系统设计、程序编码、测试等基本方

法和技能;

3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

4.训练用系统的观点和软件开辟普通规范进行软件开辟,培养软件工作者所应具

备的科学的工作方法和作风。

二、设计内容

设停车场是一个可停放n辆汽车的狭长通道,且惟独一个大门可供汽车进

出。汽车在停车场内按车辆到达时间的先后顺序,挨次由北向南罗列(大门在最

南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,

则后来的汽车只能在门外的便道上等待,一旦有车开走,则排在便道上的第一辆

车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场

为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车

场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按

上述要求进行管理的摹拟程序。

三、设计要求

按照从终端读入的输入数据进行摹拟管理,每一组输入数据包括三个数据项:

汽车“进站”或者“出站”信息、汽车牌照号码以及进站或者出站的时刻,对每一组

输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或者便

道上的停车位置;若是车辆离去,则输出汽车在停车场内逗遛的时间和应交纳的

费用(在便道上停留不收费),按以顺序结构实现,队列以链表结构实现。

四、设计过程

1、算法思想分析

由于停车场是一个狭窄通道,而且惟独一个大门可供汽车进出,问题要求汽

车停车场内按车辆到达时间的先后顺序,由此很容易联想到挨次由北向南罗列。

数据结构中的堆栈模型,因此可首先设计一个堆栈,以堆栈来摹拟停车场,又因

这样一来可以根据车牌号准确找到汽车位置,所为每一个汽车的车牌号都不一样,

以堆栈里的数据元素我设计成汽车的车牌号。当停车场内某辆车要离开时,在他

之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按

原次序进入停车场。这是个一退一进的过程,而且让道的汽车必须保持原有的先

后顺序,因此可再设计一个堆栈,以之来暂时存放为出站汽车暂时让道的汽车车

牌号。当停车场满后,继续进来的汽车需要停放在停车场旁边的便道上等候,若

停车场有汽车开走,则按排队的先后顺序挨次进站,最先进入便道的汽车将会最

先进入停车场,这彻底是一个先进先出模型,因此可设计一个队列来摹拟便道,

队列中的数据元素仍然设计成汽车的车牌号。此外,停车场根据汽车在停车场内

停放的总时长来收费的,在便道上的时间不计费,因此必须记录车辆进入停车场

时的时间,车辆离开停车场时的时间不需要记录,当从终端输入时可直接使用。

由于时间不像汽车一样需要让道,我设计了一个顺序表来存放时间。又用顺序表

用派生法设计了一个堆栈,恰好满足上面摹拟停车场的需要。

2、算法描述与实现

(1)时间结点类型

typedef struct time{

int hour;

int min;

}Time; /*时间结点*/

(2)车辆进出站信息类型

typedef struct node{

char num[10];

Time reach;

Time leave;

}CarNode; /*车辆信息结点*/

(3)停车场和便道信息类型

typedef struct NODE{

CarNode *stack[Max+1];

int top;

}SeqStackCar; /*摹拟车站*/

typedef struct car{

CarNode *data;

struct car *next;

}QueueNode;

typedef struct Node{

QueueNode *head;

QueueNode *rear;

}LinkQueueCar; /*摹拟通道*/

void InitStack(SeqStackCar *,int n); /*声明栈*/

//初始化,创建一个新栈S用于停车场

int InitQueue(LinkQueueCar *); /*声明便道*/


本文标签: 停车场 汽车 设计 车辆 时间