数据结构停车场管理Word格式.docx

上传人:b****7 文档编号:22607744 上传时间:2023-02-04 格式:DOCX 页数:12 大小:18.99KB
下载 相关 举报
数据结构停车场管理Word格式.docx_第1页
第1页 / 共12页
数据结构停车场管理Word格式.docx_第2页
第2页 / 共12页
数据结构停车场管理Word格式.docx_第3页
第3页 / 共12页
数据结构停车场管理Word格式.docx_第4页
第4页 / 共12页
数据结构停车场管理Word格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

数据结构停车场管理Word格式.docx

《数据结构停车场管理Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构停车场管理Word格式.docx(12页珍藏版)》请在冰豆网上搜索。

数据结构停车场管理Word格式.docx

S,n)

操作结果:

构造一个空栈S,该栈可存放n个元素

push(&

S,e)

初始条件:

栈S已存在。

在栈S的栈顶插入新的栈顶元素e。

pop(&

S,&

e)

删除S的栈顶元素,并以e返回其值。

DestroyStack(&

S)

销毁栈So

ClearStack(&

将S清为空栈。

StackLength(&

栈S已存在

返回栈S的长度

StackEmpty(&

若S为空栈,则返回TRUE否则返回FALSE

GetTop(S,&

若栈S不空,则以e返回栈顶元素。

StackTraverse(S,visit())

从栈底到栈顶依次对S中的每个元素调用函数visit()

}ADTstack1.2设定队列的抽象数据类型定义为:

ADTQueue{

D={ai|ai€ElemSet,i=1,2,…,n,n>

InitQueue(&

Q)

构造一个空队列Q

DestroyQueue(&

队列Q已存在

队列Q被销毁,不再存在

ClearQueue(&

队列Q已存在。

将Q清为空队列。

QueueEmpty(&

若Q为空队列,则返回TRUE否则返回FALSE

QueueLength(Q)

返回Q的元素个数,即队列的长度。

GetHead(Q,&

Q为非空队列。

用e返回Q的队头元素。

EnQueue(&

Q,e)

插入元素e为Q的新的队尾元素。

DeQueue(&

Q,&

删除Q的队头元素,并用e返回其值

QueueTraverse(Q,visit())

Q已存在且非空。

visit()。

从队头到队尾,依次对Q的每个数据元素调用函数一旦visit()失败,则操作失败。

}ADTQueue2)本程序图示结构

(保密)

详细设计

1.车辆信息类型

typedefstructnode{

intpassport;

//存储车辆牌照信息

inttime;

//存储进场时间信息

}node;

2.栈类型(停车场)

typedefstructstack{

node*base;

node*top;

intstacksize;

}stack;

voidinitstack(stack&

S,intn){〃构造空栈

S.top=S.base;

S.stacksize=n;

}

voidpush(stack&

S,nodee){〃入栈函数

if((S.top-S.base)=S.stacksize){EnQueue(Q,e);

}//如果栈满,调用入

队函数

else{

S.top-passport=e.passport;

S.top-time=e.time;

S.top++;

intpop(stack&

S,node&

e){〃出栈函数

if(S.top==S.base)returnERROR;

//如果栈空,返回ERROR

--S.top;

e.passport=S.top-passport;

e.time=S.top-time;

returnOK;

3.队列类型(便道)

typedefstructQnode{

nodeQdata;

structQnode*next;

}Qnode;

typedefstruct{

Qnode*front;

Qnode*rear;

}LinkQueue;

voidEnQueue(LinkQueue&

Q,nodee){〃入队函数

Qnode*q;

q=(Qnode*)malloc(sizeof(Qnode));

q-Qdata.passport=e.passport;

q-Qdata.time=e.time;

q-next=NULL;

if(count==O){Q.front=q;

count++;

}//若创建节点前队空,头指针指向

节点

Q.rear-next=q;

Q.rear=q;

voidDeQueue(LinkQueue&

Q,node&

e){//出队函数

if(Q.rear==NULL){}

e.passport=Q.front-Qdata.passport

e.time=Q.front-Qdata.time;

count=0;

}

Q.front=Q.front-next;

if(Q.front==NULL){Q.rear=Q.front

4.全局变量及编译预处理语句

#defineERROR0

#defineOK1

#defineNULL0

intcount=O;

//队列是否为空的标志

inttimes;

stacks,temp;

//初始化栈

LinkQueueQ;

//初始化队列

5.主函数及其他函数的C+h算法

voidmain(){

intn,exit

floatmoney;

charinfo;

intpass;

Q.front=NULL;

Q.rear=(Qnode*)malloc(sizeof(Qnode));

Q.rear-next=Q.rear;

printf("

停车场容量:

"

);

cinn;

initstack(s,n);

initstack(temp,n);

停车场费率:

cinmoney;

while(exit!

=OK){

\n请输入车辆数据\nA到达D离去E结束:

);

cininfo;

请输入车辆牌照:

cinpass;

if(info=='

A'

||info=='

E'

)printf("

请输入进场时间:

cintimes

){exit=OK;

elseif(info=='

){

inti,j;

nodea;

a.passport=pass;

a.time=times;

push(s,a);

for(i=1;

i=n;

i++){

if(s.base[i-1].passport==a.passport){

停车位置(停车场内):

%d\n"

i);

Qnode*tp;

tp=Q.front;

if(tp==NULL){}

j=1;

while(tp!

=Q.rear){

tp=tp-next;

j++;

停车位置(便道):

j);

D'

noded;

inttp,counter=0;

do{

counter++;

tp=pop(s,d);

=ERROR){

if(d.passport==pass){

floatm;

m=(times-d.time)*money;

printf("

停留时间:

%(需交费:

%f\n"

times-d.time,m);

while(temp.base!

=temp.top){

pop(temp,d);

push(s,d);

wait(s);

d.passport=9999;

tp=ERROR

push(temp,d);

d.passport=0;

}while(d.passport==0||countern);

elseif(info!

='

&

info!

){}

voidwait(stack&

S){

!

=0){

if((S.top-S.base)==(S.stacksize-1)&

count

nodetemp;

DeQueue(Q,temp);

temp.time=times;

push(S,temp);

调试分析

(1)一开始在调试程序时遇到了内存错误,经过DEBU,找到了引起内存错误的原因:

即在建立队头指针与队尾指针时没有对指针进行初始化(没有为指针动态分配空间)。

问题得到解决。

⑵在Wait函数中的If语句处,一开始的算法有些问题,导致实现的功能与设想的有出入,无法得到正确的结果。

原条件为:

S.top-S.base==S.stacksize

后改为:

(S.top-S.base)==(S.stacksize-1)&

count!

=0

该函数的功能得以正确实现。

(3)在EnQueue函数中,一开始用的是建立实体结点,用队头队

尾指针指向该实体的方法来创建队列。

在调试过程中发现,忽略了生存期,导致队列并没有被创建。

改为创建指针,并为指针分配空间,再给头指针和尾指针赋值的方式解决问题。

虽然指针也有生存期,但为它分配的空间却并没有被收回,于是队列创建成功,问题解决。

⑷本程序中:

车辆到达,离去时的时间复杂度均为:

0(n)。

本程序空间复杂度为:

0(n)。

(5)经验体会:

借助DEBUG口Watch,可以更快的找到程序中的非语法错误。

在声明一个指针后,要对指针进行初始化,并且0可以作为地址使用。

注意生

存期对程序的影响。

用户使用说明

(1)输入车辆数据:

A为到达,D为离去,E为结束程序。

(2)接着输入车辆的牌照信息

(3)若为到达的车辆,输入进场信息,若为离去的车辆,输入离场信息。

(4)若车辆到达,可得到车辆的停放位置信息,若车辆离去,可得到车辆的停放时间(在便道上的停放时间除外),以及应该交纳的费用。

(5)本程序不断循环要求输入车辆信息,直到输入的车辆数据为E时,程序

结束。

测试结果

测试数据:

设n=2

输入数据:

2

输出:

停车场容量:

停车场费率:

6A,1,5停车位置(停车场内):

1A,2,10停车位置(停车场内):

2D,1,15停留时间:

10需交费:

60.00A,3,20停车位置(停车场内):

2A,4,25停车位置(便道):

1A,5,30停车位置(便道):

2D,2,35停留时间:

25需交费:

150.00D,4,40停留时间:

5需交费:

30.00

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

当前位置:首页 > 医药卫生 > 中医中药

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

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