好文档 - 专业文书写作范文服务资料分享网站

数据结构 停车场管理

天下 分享 时间: 加入收藏 我要投稿 点赞

实习报告

题目:停车场管理 姓名:袁韬博 学号: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={ai|ai∈SStop,i=1,2,3,······,n} 数据关系 :R={|ai∈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={ai|ai∈SStop,i=1,2,3,······,n} 数据关系 :R={|ai∈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 } }

intInSQType(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 }

intScanf(SStop&e){//输入数据操作 cin>>e.a;//输入操作 cin>>e.b;//输入车牌号

cin>>e.c;//输入进入或离开时间 e.d=0; return 0; }

int Arrival(Stop &stop,SQType *wait,SStop&e,int&n,SStop a[],int&y){//进入操作

if(Push(stop,e,n)){//如果栈不满将e压入栈 e.e=1;//将判断数据设置为1 a[y]=e;y++;//将数据存入数组

cout<

else{//如果栈满将e入队列 InSQType(wait,e);

e.e=0;//将判断数据数值为0 a[y]=e;y++;//将数据存入数组

cout<

int Departure(Stop &stop,SStop a[],Stop &wait1,SQType *wait,SStop&e,int&n,int&y,int&rt){//离开操作

int o=0;

SStop *q,u,mn,*kl;

for(inti=0;i

intui=0;

if(e.e==0){cout<<\该车在停车场停车时间为:0\费用为0\如果未进入停车场,打印停车时间与费用

while(e.d-wait->head>1){//将e之前的数据出队列再入队列 kl=OutSQType(wait); InSQType(wait,*kl);}

if(wait!=NULL)OutSQType(wait);//将e出队列

while(wait->tail-e.d-wait->head>1&&wait!=NULL){//将e之后的数据出队列再入队列

mn=*OutSQType(wait); InSQType(wait,mn);} }

if(e.e==1){cout<<\该车在停车场停车时间为:\费用为:\如果在停车场之中,计算费用并输出

while(ui

Pop(stop,mn);//将e出栈

while(wait1.top!=wait1.base){//将先前出栈数据压入栈中

Pop(wait1,u); Push(stop,u,n); }

q=OutSQType(wait);//从队列中出一个数据

if(q!=NULL){

Push(stop,*q,n);//将q压入栈中 for(inti=0;ib==a[i].b){

a[i].e=1;//用循环将q的判断数据设置为1

a[i].c=e.c;//用循环将q的如停车场时间设为e离开时间 } }}}

return 0; }

int main(){//主函数模块

SStop as[100];//定义一个数组存储车辆信息 Stop stop,wait1;//定义两个栈 SQType *wait;//定义队列 intn,m,y=0;

cout<<\输入停车场长度:\输入n cin>>n;

cout<<\请输入每小时停车费用:\输入m cin>>m;

initStack(stop,n);//建立空栈stop initStack(wait1,n);//建立空栈wait1 wait=SQTypeInit();//建立空队列wait SStop a;

loop:cout<<\请输入数据:\Scanf(a);//应用函数输入数据

if(a.a=='A'){//如果为进入执行进入操作 Arrival(stop,wait,a,n,as,y); }

if(a.a=='D'){//如果为离开执行离开操作

Departure(stop,as,wait1,wait,a,n,y,m); }

if(a.a!='E')goto loop;

cout<<\结束\如果为‘E’结束 return 0;

}

四、调试分析

1. 在此程序之中,一开始在栈与队列的建立是出现指针的错乱,检查后更改。 2. 在一开始未曾考虑过对车辆的停车位置的判断,在发现问题后将判断数据加上。 3. 在编写时为曾判断从何处出车,造成费用的计算混乱。

数据结构 停车场管理

实习报告题目:停车场管理姓名:袁韬博学号:16030120021完成日期:2017.10.23一、需求分析1.本题目要求建立一个可指定长度的栈,和长度可变化的队列,以当作停车场和便道的车的存放。2.本题目要求在停车场的车离开时,便道的车按照先后顺序进入一辆,并开始于此时记录时间。<
推荐度:
点击下载文档文档为doc格式
2l6ks8xika3fmdy9ul8q7b8vd538ce00y5c
领取福利

微信扫码领取福利

微信扫码分享