数据结构 停车场管理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实习报告

题目:停车场管理姓名:袁韬博学号:16030120021 完成日期:2017.10.23

一、需求分析

1.本题目要求建立一个可指定长度的栈,和长度可变化的队列,以当作停车场和便

道的车的存放。

2.本题目要求在停车场的车离开时,便道的车按照先后顺序进入一辆,并开始于此

时记录时间。

3.在本题目之中在便道的停车不计费用,在此题中应判断在停车场还是在便道的信

息。

4.本题目要求根据数据的第一位数据判断进入还是离开,根据要求输出信息。

5.程序执行命令为:1.存入车辆时输出停车信息2.车辆离开时输出停车时间和应缴

纳费用 3.输入‘E’时表示结束。

6.测试数据:

n=2,m(每小时停车费用)=3,(A,1,5)

(A,2,10)(D,1,15)(A,3,20)(A,4,25)(A,5,30)

(D,2,35)(D,4,40)(E,0,0)其中A表示为Arrival(到达),D表示为Departure

(离开),E表示为End(结束)。

二、概要设计

1.设定栈的抽象数据类型定义

数据对象:D={a i|a i∈SStop,i=1,2,3,······,n}

数据关系:R={|a i∈D, i=1,2,3,······,n }

基本操作:

initStack(&S,d)

操作结果:建立一个长度为d的空栈

Push(&S, &e, &d)

初始条件:栈已存在,长度为d

操作结果:如栈已满返回false,否则将e,压入栈中,返回true

Pop(&S, e)

初始条件:栈已存在

操作结果:如栈为空返回false,否则弹栈入e,返回true

2.设定队列的抽象数据类型定义

数据对象:D={a i|a i∈SStop,i=1,2,3,······,n}

数据关系:R={|a i∈D, i=1,2,3,······,n }

*SQTypeInit()

操作结果:建立一个空队列

InSQType(*q, &data)

初始条件:队列已存在

操作结果:将data压入队列之中

*OutSQType( *q)

初始条件:队列已存在

操作结果:弹出队列,返回其指针。

3.程序包含6个模块

1)主程序模块:包含栈与队列的对象建立,输入值的判断以及函数的实现

2)栈模块:实现停车场抽象数据类型

3)队列模块:实现便道抽象数据类型

4)函数模块:实现数据的输入,进入和离开的弹栈与压栈及输出操作三、详细设计

#include

#include

#include

using namespace std;

typedef struct{ //定义车辆的结构体

char a; //进入与离开信息

int b; //车牌号

int c; //进入或离开时间

int d; //在停车场或便道的序号

int e; //在停车场为1,在便道为0

}SStop;

typedef struct{ //定义栈结构体

SStop *base; //定义栈底指针

SStop *top; //定义栈顶指针

SStop a; //定义栈元素

}Stop;

struct SQType //定义队列结构体

{

SStop data[100]; //分配队列neicun

int head; //定义队列头

int tail; //定义队列尾

};

SQType *SQTypeInit()//建立空队列

{

SQType * q; //定义队列指针

if(q=new SQType) //建立队列

{

q->head=0; //将队列的头的定为0

q->tail=0; //将队列的尾的定为0

return q; //返回队列指针

}

else

{

return NULL; //建立不成功返回NULL

}

}

int InSQType(SQType *q,SStop &data)//入队列操作

{

if(q->tail==100) //如果队列满返回"队列已满!操作失败!"

{

cout<<"队列已满!操作失败!"<

return 0;

}else //如果队列不满将data入队列并设置该车的停车位置

{

data.d=1-q->head+q->tail;

q->data[q->tail++]=data;

return 1;

}

}

SStop *OutSQType(SQType *q)//出队列操作

{

if(q->tail==q->head) //如果队列为空返回NULL

{

return NULL;

}else //如果队列不为空出队列并返回此数据指针

{

return &(q->data[q->head++]);

}

}

bool initStack(Stop &S,int d){ //建立空栈

S.base=(SStop*)malloc(d*sizeof(SStop)); //分配长达d的内存

if(!S.base)return false; //分配不成功返回false

S.top=S.base; //是栈顶指针等于栈底指针

return true; //建立成功返回ture

}

bool Push(Stop &S,SStop &e,int &d){ //压栈操作

if(S.top-S.base>=d)return false; //如果栈满返回false

if(S.top==S.base)e.d=1; //如果栈为空将e的停车位置设为1 else e.d=1+S.top-S.base; //设置e的停车位置

*S.top++=e; //将e压入栈中

return true; //返回true

}

bool Pop(Stop &S,SStop &e){ //弹栈操作

if(S.top==S.base)return false; //如果栈为空返回false

e=*--S.top; //弹栈并将其值赋给e

return true; //返回true

}

int Scanf(SStop &e){ //输入数据操作

cin>>e.a; //输入操作

cin>>e.b; //输入车牌号

cin>>e.c; //输入进入或离开时间

e.d=0;

return 0;

}

相关文档
最新文档