数据结构课程设计停车场管理Word文件下载.docx

上传人:b****5 文档编号:21607964 上传时间:2023-01-31 格式:DOCX 页数:15 大小:174.03KB
下载 相关 举报
数据结构课程设计停车场管理Word文件下载.docx_第1页
第1页 / 共15页
数据结构课程设计停车场管理Word文件下载.docx_第2页
第2页 / 共15页
数据结构课程设计停车场管理Word文件下载.docx_第3页
第3页 / 共15页
数据结构课程设计停车场管理Word文件下载.docx_第4页
第4页 / 共15页
数据结构课程设计停车场管理Word文件下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数据结构课程设计停车场管理Word文件下载.docx

《数据结构课程设计停车场管理Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计停车场管理Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。

数据结构课程设计停车场管理Word文件下载.docx

停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。

每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。

如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。

编制一程序模拟该停车场的管理。

3设计要求

要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。

4设计构思

根据题目要求,停车场只有一个大门,因此可用一个栈来模拟:

当栈满后,继续来的车只能停在便道上,根据便道停车的特点,可知这可以用一个队列来实现,先排队的车先离开便道进入停车场。

由于排在停车场的车可以离开并要求后面的车辆都离开停车场,让此车离去。

再让后面的车辆依原来的次序进入停车场,因此在一个栈和一个队列的基础上还需要有一个地方(车辆规避所)保存为了让路离开的车辆,很显然着也应该用一个栈来模拟。

因此,本题中用到俩个栈和一个队列。

对于停车场和车辆规避所,有车辆进入和车辆离开俩个过程,这就是是进栈出栈操作,只是还允许排在中间的车辆离开,因此在栈中需要查找。

对于便道,也有如队列和出队列操作,同样允许排在中间的车辆先离开队列。

这样基本动作只需利用栈和队列的基本操作即可。

整个操作过程是:

当输入数据表示有车辆到达时,则判断栈是否满,若未满则新数据进栈,数据包括时间和车牌号;

否则,将数据放在队尾,表示车辆在道上等待。

当输入数据表示有车辆离开时,就在栈中寻找是不是有此车牌号的车辆,若有就让其离开,并根据时间计费;

若没有,就在便道上找,否则反映出错信息。

当离开停车场的车辆位于栈的中间时,必须先将此位置到栈顶之间的所有数据转到车辆规避所中,然后安排车辆出栈,最后将一个栈中的数据倒回倒停车场栈中。

在模拟停车场管理时还要注意,如果停车长栈中没有车辆停放时数据输入仍然要求车辆退出,则显示出错信息,程序中停车场的停车数为N,便道不做要求。

且每经过一次操作都要显示当前停车场的状况。

5算法说明

2.算法说明

(1)功能模块说明:

停车场管理系统含有三个模块,即:

车辆到达、离开、列表显示

(2)以模块为单位分析算法

1、“到达”模块:

到达时有两种情况,即车场是否满,未满则直接进入停车场;

满时,到便道等待。

2.“离开”模块:

离开时,当车库为空时,提示没有车,结束;

否则车辆离开。

如图3。

3.“显示”模块:

显示模块有两个显示选项,即:

车场与便道。

6复杂度说明

说明:

对时间复杂度的分析,均指在最坏情况下的时间复杂度。

在栈结构中:

(1)初始化栈(即车库),使车库为空的,此时,时间复杂度=O(max)。

(2)停车最坏的情况是要车位已经满,此时,时时间复杂度=O

(1)。

(3)关于车辆离开的时间复杂度=O(max)。

(4)车场信息的显示的时间复杂度=O

(1)。

在队列结构中:

(1)出场车的信息的时间复杂度=O

(1)。

(2)判断通道上是否有车及车站是否已满,此时,时间复杂度O=(max)。

(3)车辆停车费用的时间复杂度O=

(1)。

7测试结果

1)车辆到达

2)车辆离开

3)列表查看

8总结反思

通过本次课程设计,我对数据结构的理解进一步加深,我理解和掌握了每一段程序代码的功能及含义,并且能够实现模拟停车场管理的主要功能:

利用栈实现车的入库问题,利用队列完成车在便道上停放的问题,主要是通过栈和队列的初始化,调用等函数来模拟停车问题。

学习数据结构,我学会如何将所学的知识运用到实际中,解决一些实际的问题,这才是学习的根本。

当然在实验中我也遇到了不少实际性的问题,比如车辆停车的时间hour限制在24小时,min限制在60分钟之内,如果加入日期计算就更好了;

在便道上等待的车辆,车主不可能无限制的等待,应该编写一个便道上车辆离开的函数更合理些。

编写的程度要与实际有联系,这就不能只依赖于课本,还要联系实际多多思考,重复调试,不断改进,才能编出一个符合实际的有价值的系统。

9源程序

#include<

stdio.h>

stdlib.h>

string.h>

/*------------------------------------------------------------------------------*/

#defineMAX3/*车库容量*/

#defineprice0.05/*每车每分钟费用*/

typedefstructtime{

inthour;

intmin;

}Time;

/*时间结点*/

typedefstructnode{

charnum[10];

Timereach;

Timeleave;

}CarNode;

/*车辆信息结点*/

typedefstructNODE{

CarNode*stack[MAX+1];

inttop;

}SeqStackCar;

/*模拟车场*/

typedefstructcar{

CarNode*data;

structcar*next;

}QueueNode;

typedefstructNode{

QueueNode*head;

QueueNode*rear;

}LinkQueueCar;

/*模拟通道*/

voidInitStack(SeqStackCar*);

/*初始化栈*/

intInitQueue(LinkQueueCar*);

/*初始化便道*/

intArrival(SeqStackCar*,LinkQueueCar*);

/*车辆到达*/

voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);

/*车辆离开*/

voidList(SeqStackCar,LinkQueueCar);

/*显示存车信息*/

intmain()

{

SeqStackCarEnter,Temp;

LinkQueueCarWait;

intch;

InitStack(&

Enter);

/*初始化车站*/

Temp);

/*初始化让路的临时栈*/

InitQueue(&

Wait);

/*初始化通道*/

while

(1)

printf("

\n1.车辆到达"

);

2.车辆离开"

3.列表显示"

4.退出系统"

scanf("

%d"

&

ch);

if(ch>

=1&

&

ch<

=4)break;

elseprintf("

\npleasechoose:

1|2|3|4."

}

switch(ch)

case1:

Arrival(&

Enter,&

break;

case2:

Leave(&

Temp,&

case3:

List(Enter,Wait);

/*列表打印信息*/

case4:

exit(0);

/*退出主程序*/

default:

break;

voidInitStack(SeqStackCar*s)/*初始化栈*/

inti;

s->

top=0;

for(i=0;

i<

=MAX;

i++)

stack[s->

top]=NULL;

intInitQueue(LinkQueueCar*Q)/*初始化便道*/

Q->

head=(QueueNode*)malloc(sizeof(QueueNode));

if(Q->

head!

=NULL)

head->

next=NULL;

rear=Q->

head;

return

(1);

elsereturn(-1);

voidPRINT(CarNode*p,introom)/*打印出场车的信息*/

intA1,A2,B1,B2;

\n请输入离开的时间:

/**:

**/"

%d:

(p->

leave.hour),&

leave.min));

\n离开车辆的车牌号为:

"

puts(p->

num);

\n其到达时间为:

%d:

p->

reach.hour,p->

reach.min);

离开时间为:

leave.hour,p->

leave.min);

A1=p->

reach.hour;

A2=p->

reach.min;

B1=p->

leave.hour;

B2=p->

leave.min;

\n应交费用为:

%2.1f元"

((B1-A1)*60+(B2-A2))*price);

free(p);

intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*车辆到达*/

CarNode*p;

QueueNode*t;

p=(CarNode*)malloc(sizeof(CarNode));

_flushall();

\n请输入车牌号:

gets(p->

if(Enter->

top<

MAX)/*车场未满,车进车场*/

Enter->

top++;

\n车辆在车场第%d位置."

Enter->

top);

\n请输入到达时间:

reach.hour),&

reach.min));

stack[Enter->

top]=p;

else/*车场已满,车进便道*/

\n该车须在便道等待!

t=(QueueNode*)malloc(sizeof(QueueNode));

t->

data=p;

W->

rear->

next=t;

rear=t;

voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)

{/*车辆离开*/

inti,room;

CarNode*p,*t;

QueueNode*q;

/*判断车场内是否有车*/

top>

0)/*有车*/

while

(1)/*输入离开车辆的信息*/

\n请输入车在车场的位置/1--%d/:

room);

if(room>

room<

=Enter->

top)break;

while(Enter->

room)/*车辆离开*/

Temp->

stack[Temp->

top]=Enter->

top];

top--;

p=Enter->

while(Temp->

=1)

top]=Temp->

PRINT(p,room);

/*判断通道上是否有车及车站是否已满*/

if((W->

=W->

rear)&

MAX)/*便道的车辆进入车场*/

q=W->

next;

t=q->

data;

\n便道的%s号车进入车场第%d位置."

t->

num,Enter->

\n请输入现在的时间/**:

**/:

(t->

next=q->

if(q==W->

rear)W->

rear=W->

top]=t;

free(q);

\n便道里没有车.\n"

\n车场里没有车."

/*没车*/

voidList1(SeqStackCar*S)/*列表显示车场信息*/

if(S->

0)/*判断车站内是否有车*/

\n车场:

\n位置到达时间车牌号\n"

for(i=1;

=S->

top;

%d"

i);

%d"

S->

stack[i]->

reach.hour,S->

puts(S->

\n车场里没有车"

voidList2(LinkQueueCar*W)/*列表显示便道信息*/

QueueNode*p;

p=W->

if(W->

rear)/*判断通道上是否有车*/

\n等待车辆的号码为:

while(p!

data->

p=p->

\n便道里没有车."

voidList(SeqStackCarS,LinkQueueCarW)

intflag,tag;

flag=1;

while(flag)

\n请选择1|2|3:

\n1.车场\n2.便道\n3.返回\n"

tag);

if(tag>

=1||tag<

=3)break;

switch(tag)

List1(&

S);

/*列表显示车场信息*/

List2(&

W);

/*列表显示便道信息*/

flag=0;

}}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1