数据结构停车场问题实验报告汇总

合集下载

停车场管理实验报告3篇

停车场管理实验报告3篇

停车场管理实验报告第一篇:实验简介本次实验是关于停车场管理的,旨在探讨停车场的管理方法以及利用计算机技术对停车场进行智能管理的可行性。

实验过程中,我们首先对停车场的基本情况进行了调查和分析,并确定了停车场的布局和车位数量。

然后,我们设计了一个基于计算机视觉技术的车牌识别系统,能够自动识别汽车牌照,并将其和相应的车位绑定。

最后,我们开发了一个基于云端的管理系统,能够实时监控停车场的使用情况,统计收益和预测流量,优化停车场管理。

通过本次实验,我们希望能够提高停车场的利用率,降低管理成本,提高用户体验。

第二篇:实验步骤1. 调查和分析首先,我们对停车场的周边环境、车流量、停车需求等进行了调查和分析,并根据调查结果确定了停车场的布局和车位数量。

2. 设计车牌识别系统我们采取了基于计算机视觉技术的车牌识别系统,能够自动识别汽车牌照,并将其和相应的车位绑定。

该系统主要分为以下三个部分:(1)摄像头:采用高清摄像头,能够自动对焦和自动曝光,提高识别准确率。

(2)软件系统:采用OpenCV图像处理库进行开发,能够自动识别车牌,并提取车牌号码信息。

(3)数据存储:采用MySQL数据库进行存储,能够存储车牌号码和相应的车位信息,方便管理。

3. 开发管理系统我们开发了一个基于云端的管理系统,能够实时监控停车场的使用情况,统计收益和预测流量,优化停车场管理。

该系统主要包括以下功能:(1)实时监控:通过车牌识别系统和摄像头,能够实时监控停车场内的车辆,并提供车位信息和空余位置。

(2)预约停车:用户可以通过手机或网站进行预约停车,并预定相应的车位。

(3)收费管理:管理人员可以通过系统对停车场的收费进行监控和管理,能够统计收益和优化停车场营运。

4. 测试和优化最后,我们进行了系统的测试和优化,并对系统的性能进行了评估和改进,确保停车场管理系统的稳定和可靠性。

第三篇:实验结果与展望经过长时间的实验和努力,我们开发出了一套基于计算机视觉技术的停车场管理系统,能够实现车辆自动识别和智能管理。

停车系统实验报告

停车系统实验报告

一、实验背景随着城市化进程的加快,汽车数量不断增加,停车难问题日益突出。

为了提高停车效率,减少交通拥堵,实现停车场管理的智能化,我们设计并实现了一个基于数据结构的停车场管理系统。

本系统采用栈和队列数据结构模拟停车场的运行过程,实现了车辆进出、停车位置分配、费用计算等功能。

二、实验目的1. 理解并掌握栈和队列数据结构在停车场管理中的应用。

2. 设计并实现一个停车场管理系统,实现车辆进出、停车位置分配、费用计算等功能。

3. 体会数据结构在实际问题中的应用价值。

三、实验内容1. 系统设计(1)数据结构设计停车场:采用顺序栈实现,栈顶表示停车场最北端,栈底表示停车场最南端。

便道:采用链队列实现,队首表示便道最北端,队尾表示便道最南端。

汽车信息:定义一个结构体,包含车牌号、到达时间、离开时间、停车费用等属性。

(2)功能模块设计进出停车场:根据车辆到达或离开的时间,判断车辆是进入停车场还是离开停车场。

停车位置分配:根据停车场和便道的实际情况,为车辆分配停车位置。

费用计算:根据车辆在停车场停留的时间,计算停车费用。

输出结果:输出每辆车到达后的停车位置、离开时的费用和停留时间。

2. 系统实现(1)数据结构实现顺序栈:使用数组实现,提供入栈、出栈、判空等操作。

链队列:使用链表实现,提供入队、出队、判空等操作。

(2)功能模块实现进出停车场:根据车辆到达或离开的时间,判断车辆是进入停车场还是离开停车场。

停车位置分配:根据停车场和便道的实际情况,为车辆分配停车位置。

费用计算:根据车辆在停车场停留的时间,计算停车费用。

输出结果:输出每辆车到达后的停车位置、离开时的费用和停留时间。

3. 系统测试(1)功能测试测试车辆进出停车场功能。

测试停车位置分配功能。

测试费用计算功能。

(2)性能测试测试系统在高并发情况下的性能。

四、实验结果与分析1. 功能测试结果经过测试,系统各项功能均能正常运行,满足设计要求。

2. 性能测试结果在高并发情况下,系统运行稳定,性能良好。

数据结构停车场问题实验报告汇总

数据结构停车场问题实验报告汇总

数据结构停车场问题实验报告汇总1. 引言停车场问题是计算机科学中经典的数据结构问题之一。

在实际生活中,停车场管理对于有效利用空间和提高停车效率至关重要。

本实验旨在通过设计和实现一个停车场管理系统,探索不同数据结构在解决停车场问题上的应用。

2. 实验目的本实验的主要目的是通过实现停车场管理系统,探索以下内容:- 学习数据结构的基本概念和原理;- 理解停车场问题的本质和需求;- 选择合适的数据结构来解决停车场问题;- 设计和实现停车场管理系统;- 进行性能分析和评估。

3. 实验方法本实验采用如下方法来完成停车场管理系统的设计和实现:- 确定停车场问题的需求和功能;- 选择合适的数据结构,如队列、栈、链表等;- 设计停车场管理系统的数据结构和算法;- 实现停车场管理系统的核心功能,包括车辆进入和离开、停车位管理、收费等;- 进行系统测试和性能评估。

4. 实验结果经过设计和实现,我们成功完成了停车场管理系统,并进行了系统测试和性能评估。

以下是我们得到的一些实验结果:- 系统能够准确地记录车辆的进入和离开时间;- 系统能够根据停车时间计算出合适的停车费用;- 系统能够管理停车位的分配和释放;- 系统具有良好的性能和稳定性。

5. 实验分析通过实验结果的分析,我们得出以下结论:- 队列是一个适合管理停车场的数据结构,可以实现先进先出的车辆进出顺序;- 栈可以用于实现停车场的历史记录,方便查询和管理;- 链表可以用于实现停车位的分配和释放;- 在实际应用中,停车场管理系统需要考虑并发访问和高效查询等问题。

6. 实验总结本实验通过设计和实现停车场管理系统,深入理解了数据结构的应用和原理。

通过实验,我们学到了以下知识和技能:- 数据结构的基本概念和原理;- 停车场问题的本质和需求;- 选择合适的数据结构解决问题;- 设计和实现停车场管理系统;- 进行系统测试和性能评估。

7. 参考文献[1] Weiss, Mark Allen. Data Structures and Algorithm Analysis in Java. Pearson Education, 2013.[2] Cormen, Thomas H., et al. Introduction to Algorithms. MIT Press, 2009.以上是对数据结构停车场问题实验报告的汇总,通过本实验我们深入了解了停车场问题的本质和需求,并成功设计和实现了停车场管理系统。

数据结构实验(停车场问题)

数据结构实验(停车场问题)

《数据结构》课程实验实验报告题目:停车场管理专业:计算机科学与几技术ﻩ班级:姓名: ﻩ学号:ﻩ完成日期:一、试验内容设停车场就是一个可以停放n辆汽车得狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间得先后顺序,依次由北向南排列(大门在最南端,最先到达得第一辆车停放在车场得最北端),若车场内已经停满n辆汽车,则后来得汽车只能在门外得便道上等候,一旦有车开走,则排在便道上得第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入得车辆必须先退出场为它让路,待该辆车开出大门外,其她车辆再按次序进入车场,每辆停放在车场得车在它离开停车场时必须按它停留得时间长短交纳费用,试为停车场编制按上述要求进行管理得模拟程序.以栈模拟停车场,以队列模拟车场外得便道,按照从终端读入得输入数据序列进行模拟管理。

每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去得时刻。

对一组输入数据进行操作后得输出信息为:若就是车辆到达,则输出汽车在停车场内或便道上得停车位置;若就是车辆离去,则输出汽车在停车场内停留得时间与应交纳得费用(在便道上停留得时间不收费)。

二、试验目得(1)深入了解栈与队列得特性,掌握栈与队列得存储方法.(2)掌握栈与队列得基本操作,如初始化、入栈(队列)、出栈(队列)等,并能在实际问题背景下灵活运用。

三、流程图四、源程序代码#include<stdio、h>#include<stdafx、h〉void main(){struct cc1{int hm1,sk1;ﻩ}a[5];//停车场struct bd{inthm2,sk2;ﻩ}b[5];//便道ﻩstruct cc2ﻩ{ﻩﻩinthm3,sk3;}c[4];//存放从停车场内退出得车int p=0,q=0,x=0,n,y,t,r,i,j,g,h,z;char m;printf(”输入停车场容量与每分钟收费\n”);ﻩscanf(”%d%d”,&n,&y);printf(”输入数据:\n");for(;;){ﻩscanf(”%c",&m);//判断输入数据ﻩﻩif(m=='e'||m==’E’)ﻩbreak;ﻩscanf("%d%d",&t,&r);//t表示车牌号,r表示时间//车到达ﻩif(m=='a'||m=='A'){ﻩif(p<n)ﻩﻩ{//n表示停车场容量,p表示场内车得数量ﻩa[p]、hm1=t;ﻩﻩﻩﻩa[p]、sk1=r;ﻩﻩprintf("车停在停车厂内%d号位置、\n",p+1);ﻩﻩﻩp++;ﻩﻩ}ﻩ//车停在便道内elseﻩﻩ{ﻩﻩb[q]、hm2=t;ﻩﻩﻩﻩb[q]、sk2=r;ﻩprintf("车停在便道上%d号位置、\n",q+1);ﻩﻩq++;ﻩﻩ}ﻩﻩ}//车离开ﻩﻩif(m==’d'||m=='D')ﻩﻩ{h=p;ﻩﻩﻩfor(i=0;i<p;i++,g=i)ﻩﻩﻩif(a[i]、hm1==t)ﻩﻩ{//判断车就是否停在场内ﻩﻩp--;ﻩﻩif(i==p)//如果车停在场内最后一位ﻩﻩﻩprintf(”%d号车在停车厂内停留了%d分钟,应交纳%d元钱、\n”,t,r-a[i]、sk1,y*(r-a[i]、sk1));ﻩelseﻩﻩ{//在它之后进入得车辆先退出场为它让路ﻩfor(j=p;j>i;j-—)ﻩﻩ{ﻩﻩﻩﻩc[x]、hm3=a[j]、hm1;ﻩﻩﻩﻩc[x]、sk3=a[j]、sk1;ﻩﻩﻩx++;ﻩﻩﻩ}ﻩﻩﻩﻩprintf(”%d号车在停车厂内停留了%d分钟,应交纳%d元钱、\n”,t,r-a[i]、sk1,y*(r—a[i]、sk1));ﻩﻩﻩﻩﻩfor(j=i;x—1〉=0;x--,j++)ﻩﻩﻩﻩ{//退出得车再进入停车场内ﻩﻩﻩﻩa[j]、hm1=c[x—1]、hm3;ﻩﻩﻩﻩﻩa[j]、sk1=c[x-1]、sk3;ﻩ}}ﻩﻩﻩﻩif(q!=0)ﻩﻩﻩﻩ{//便道内得车进入停车场ﻩﻩﻩa[p]、hm1=b[0]、hm2;ﻩﻩﻩa[p]、sk1=r;ﻩﻩﻩﻩp++;ﻩﻩﻩfor(j=0;j<q-1;j++)ﻩﻩﻩﻩ{ﻩﻩﻩb[j]、hm2=b[j+1]、hm2;ﻩﻩb[j]、sk2=b[j+1]、sk2;ﻩﻩ}ﻩq-—;ﻩﻩﻩ}ﻩbreak;}ﻩﻩﻩ//判断车就是否停在便道上ﻩﻩfor(i=0;i〈q;i++,z=q)ﻩﻩﻩif(b[i]、hm2==t)ﻩ{ﻩﻩﻩﻩprintf(”该车停留在便道内,不收费、\n");ﻩfor(j=i;j〈q-1;j++)ﻩﻩ {ﻩﻩ b[j]、hm2=b[j+1]、hm2;ﻩﻩﻩb[j]、sk2=b[j+1]、sk2;ﻩﻩ}ﻩq—-;ﻩﻩ break;ﻩﻩ}if(g==h&&i==z) printf(”无该车、\n");ﻩﻩﻩ}ﻩ}}五、调试过程调试过程中,车离开得那一部分经常出现错误,运行结果与预想得不太一样,后来发现就是停车场得计数器那出现了问题,使离开后再进入停车场得位置发生了错误.如果输入得离开时间比到达得时间小,则会出现付费为负值。

数据结构-停车场-实验报告与代码

数据结构-停车场-实验报告与代码

一.需求分析1、题目要求:设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。

车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。

若停车场已经停满n辆车,后来的汽车在便道上等候,一旦有车开走,排在便道上的第一辆车可以开入;当停车场的某辆车要离开时,停在他后面的车要先后退为他让路,等它开出后其他车在按照原次序开入车场,每两停在车场的车要安时间长短缴费。

要求:以栈模拟停车场,以队列车场外的便道,按照从终端输入的数据序列进行模拟管理。

每一组数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码、以及到达或离去的时刻。

对每一组数据进行操作后的信息为:若是车辆到达,则输出汽车在停车场的内或便道上的位置:若是车辆离去则输出汽车在停车场内的停留时间和应缴纳的费用(在便道上的停留时间不收费)。

栈以顺序结构实现,队列以链表结构实现。

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

二.算法设计本程序中采用的数据模型,用到的抽象数据类型的定义,程序的主要算法流程及各模块之间的层次调用关系程序基本结构:结构体定义:(1)车辆信息的表示车辆可看成是一个节点,设计成一个结构体,定义如下:typedef struct node{char num[10]; //车牌号码Time reach; //到站时间Time leave; //离开时间}CarNode;(2)时间、栈和队列的定义时间是由小时和分钟表示的,有两部分数据,定义如下:typedef struct time{int hour;int min;}Time;停车场内用栈表示:typedef struct NODE{CarNode *stack[MAX+1]; //栈用顺序表示int top;}SeqStackCar;便道上的车辆表示:typedef struct car{CarNode *data; // 便道上的车用链表表示truct car *next;}QueueNode;typedef struct Node{QueueNode *head; // 设置头指针、尾指针。

数据结构停车场问题实验报告

数据结构停车场问题实验报告

数据结构课程设计——停车场管理问题姓名:学号:一、问题描述设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。

车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。

如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。

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

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

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

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

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

三、实现提示汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去的时刻)。

例如,(‘A’,,1,5)表示1号牌照车在5这个时刻到达,而(‘D’,,5,20)表示5号牌照车在20这个时刻离去。

整个程序可以在输入信息为(‘E’,0,0)时结束。

本题可用栈和队列来实现。

四、需求分析停车场采用栈式结构,停车场外的便道采用队列结构(即便道就是等候队列)。

停车场的管理流程如下①当车辆要进入停车场时,检查停车场是否已满,如果未满则车辆进栈(车辆进入停车场);如果停车场已满,则车辆进入等候队列(车辆进入便道等候)。

②当车辆要求出栈时,该车到栈顶的那些车辆先弹出栈(在它之后进入的车辆必须先退出车场为它让路),再让该车出栈,其他车辆再按原次序进栈(进入车场)。

当车辆出栈完毕后,检查等候队列(便道)中是否有车,有车则从队列头取出一辆车压入栈中。

五、流程图六、详细设计1.本程序主要包含四个模块1) 主程序模块int main(){Initialization();CarNode car;SqStack Park,TempPark;LinkQueue Q;InitStack(Park);InitStack(TempPark);InitQueue(Q);while((scanf("%c%d%d",&car.event,&car.num,&car.time))&&(car.event!='e'&&car .event!='E')){getchar();//除去输入结束时的回车switch(car.event){case 'A':case 'a':Arrive(Park,Q,car);break;case 'D':case 'd':Leave(Park,TempPark,Q,car);break;default: printf("您的第一个数据输入有误!\n");break;}}printf("程序结束,谢谢使用!\n");return 0;2)分别构造空栈和空队列栈:Status InitStack(SqStack &S){ //构造一个空栈S.Stacksize=0;S.base=(CarNode*)malloc((MAX)*sizeof(CarNode));if(!S.base){exit(OVERFLOW);printf("存储空间分配失败");}S.top=S.base;return OK;}队列:Status InitQueue(LinkQueue &Q){ //构造一个空队列(带头结点)Q.front=Q.rear=(QueueNode*)malloc(sizeof(QueueNode));if(!Q.front){exit(OVERFLOW);printf("存储空间分配失败");}Q.front->next=NULL;Q.queuesize=0;return OK;3)车辆到达处理Status Arrive(SqStack &S,LinkQueue &Q,CarNode &e){ //车辆到达处理if((S.top-1)->time<=e.time){ //时间处理if(!Check_Stack(S,e)&&!Check_Queue(Q,e)){ //是否已存在if(S.top-S.base<MAX){Push(S,e);printf("成功进入停车场,在%d号车库!\n",S.top-S.base);return OK;}else{EnQueue(Q,e);printf("停车场已满,车辆进入便道,在%d号车位!\n",Q.queuesize);}}elseprintf("该牌照的车已存在,输入有误,请重新输入\n");return OK;}else{printf("时间输入有误,请重新输入!\n");return FALSE;}}4)车辆离开处理Status Leave(SqStack &S,SqStack &TempS,LinkQueue &Q,CarNode &e){//车辆离开处理CarNode a;int leatime,leanum;intentertime; //进入停车场时间int cost;if(!(Check_Stack(S,e) || Check_Queue(Q,e))){printf("数据输入错误,本停车场内无所查询车辆,请重新输入!\n");return true;}else{if(Check_Stack(S,e)) //若需要离开的车辆在停车场{if(e.num==(S.top-1)->num)//车辆处在栈顶{Pop(S, a);leatime=e.time;leanum=e.num;entertime=a.time;printf("车辆进入车库时间:%d\t现在(离开)时间:%d\t停留时间:%d\t\n",entertime,leatime,leatime-entertime);}else//车辆处在栈中间{do{Pop(S,a);//从栈中依次退出Push(TempS,a);//依次进入临时栈}while((S.top-1)->num!=e.num);//直到top指针下一个位置的num=车牌号Pop(S,a); //该车离开leatime=e.time;leanum=e.num;entertime=a.time;printf("车进入停车场时间:%d\t现在(离开)时间:%d\t停留时间:%d\t\n",entertime,leatime,leatime-entertime);do{ //其余车辆按原来次序返回停车场Pop(TempS,a);Push(S,a);}while(TempS.top!=TempS.base);//条件与上面不同,此时是全部回去}cost=(leatime-entertime)*price;if(cost>=0)printf("您的车牌号为 %d 的车应交纳的费用是:%d\n",leanum,cost);if(Q.front!=Q.rear){//队列不空的话从便道进停车场DeQueue(Q,a);if(a.time<leatime) //便道车辆进车库时间应该比车库车辆离开时间晚entertime=leatime;a.time=leatime;Push(S,a);//该车进入停车场printf("车牌号为%d的车辆从便道上进入%d号车库!从现在开始计时,现在时间为:%d\n",a.num,S.top-S.base,a.time);}}else if(Check_Queue(Q,e)){ //从便道直接离开do{DeQueue(Q,a);EnQueue(Q,a);}while(Q.front->next->data.num!=e.num);DeQueue(Q,e);//前面的车进入队尾printf("您的车牌号为 %d 的车辆未进入车库从便道直接离开,费用为0!\n",e.num);}}return true;2.主要设计程序如下#include<stdio.h>#include<malloc.h>#include<stdlib.h>#define MAX 2 //停车场容量#define price 2 //单价#define OK 1#define FALSE 0#define TRUE 1#define ERROR -1#define OVERFLOW -2typedef int Status;//===================================================================== typedef struct CarNode{char event;int num;int time;}CarNode; //车辆信息结点typedef struct SqStack{CarNode *base;CarNode *top;int Stacksize;}SqStack; //栈(停车场)typedef struct QNode{CarNode data;struct QNode *next;}QueueNode; //便道结点typedef struct LinkQueue{QueueNode *front;QueueNode *rear;int queuesize;}LinkQueue; //队列(便道)//===================================================================== Status InitStack(SqStack &S){ //构造一个空栈S.Stacksize=0;S.base=(CarNode*)malloc((MAX)*sizeof(CarNode));if(!S.base){exit(OVERFLOW);printf("存储空间分配失败");}S.top=S.base;return OK;}//===================================================================== Status InitQueue(LinkQueue &Q){ //构造一个空队列(带头结点) Q.front=Q.rear=(QueueNode*)malloc(sizeof(QueueNode));if(!Q.front){exit(OVERFLOW);printf("存储空间分配失败");}Q.front->next=NULL;Q.queuesize=0;return OK;}//=====================================================================Status GetTop(SqStack S,CarNode &e){ //返回栈顶元素if(S.top==S.base)return ERROR;e=*(S.top-1);return TRUE;}//===================================================================== Status Pop(SqStack &S,CarNode &e){ //删除栈顶元素if(S.top==S.base)return ERROR;e=*--S.top;return OK;}//===================================================================== Status Push(SqStack &S,CarNode e){//插入元素为新的栈顶元素(在栈不满的前提下) if(S.top-S.base>=MAX)return FALSE;*S.top++=e;return OK;}//===================================================================== Status DeQueue(LinkQueue &Q,CarNode &e){ //删除队头元素(带头结点) if(Q.rear==Q.front)return ERROR;QueueNode *p=Q.front->next;e=p->data;Q.front->next=p->next;if(p==Q.rear)Q.rear=Q.front;free(p);Q.queuesize--;return OK;}//===================================================================== Status EnQueue(LinkQueue &Q,CarNode e){ //插入新的队尾元素QueueNode *p=(QueueNode*)malloc(sizeof(QueueNode));if(!p)exit(OVERFLOW);p->data=e;p->next=NULL;Q.rear->next=p;Q.rear=p;Q.queuesize++;return OK;}//===================================================================== Status Check_Stack(SqStack &S,CarNode e){//车辆到达时车库内是否有同名车 CarNode *Temp=S.base;while((Temp!=(S.top))&&(Temp->num!=e.num))Temp++;if((Temp==S.top))return FALSE;elsereturn TRUE;}//===================================================================== Status Check_Queue(LinkQueue &Q,CarNode e){//车辆到达时便道上是否有同名车 QueueNode *Temp=Q.front;while((Temp!=Q.rear) && (Temp->data.num!=e.num))Temp=Temp->next;if((Temp==Q.rear) && (Temp->data.num!=e.num))return FALSE;elsereturn TRUE;}//=====================================================================Status Arrive(SqStack &S,LinkQueue &Q,CarNode &e){ //车辆到达处理if((S.top-1)->time<=e.time){ //时间处理if(!Check_Stack(S,e)&&!Check_Queue(Q,e)){ //是否已存在if(S.top-S.base<MAX){Push(S,e);printf("成功进入停车场,在%d号车库!\n",S.top-S.base);return OK;}else{EnQueue(Q,e);printf("停车场已满,车辆进入便道,在%d号车位!\n",Q.queuesize);}}elseprintf("该牌照的车已存在,输入有误,请重新输入\n");return OK;}else{printf("时间输入有误,请重新输入!\n");return FALSE;}}//=====================================================================Status Leave(SqStack &S,SqStack &TempS,LinkQueue &Q,CarNode &e){//车辆离开处理CarNode a;int leatime,leanum;intentertime; //进入停车场时间int cost;if(!(Check_Stack(S,e) || Check_Queue(Q,e))){printf("数据输入错误,本停车场内无所查询车辆,请重新输入!\n");return true;}else{if(Check_Stack(S,e)) //若需要离开的车辆在停车场{if(e.num==(S.top-1)->num)//车辆处在栈顶{Pop(S, a);leatime=e.time;leanum=e.num;entertime=a.time;printf("车辆进入车库时间:%d\t现在(离开)时间:%d\t停留时间:%d\t\n",entertime,leatime,leatime-entertime);}else//车辆处在栈中间{do{Pop(S,a);//从栈中依次退出Push(TempS,a);//依次进入临时栈}while((S.top-1)->num!=e.num);//直到top指针下一个位置的num=车牌号Pop(S,a); //该车离开leatime=e.time;leanum=e.num;entertime=a.time;printf("车进入停车场时间:%d\t现在(离开)时间:%d\t停留时间:%d\t\n",entertime,leatime,leatime-entertime);do{ //其余车辆按原来次序返回停车场Pop(TempS,a);Push(S,a);}while(TempS.top!=TempS.base);//条件与上面不同,此时是全部回去}cost=(leatime-entertime)*price;if(cost>=0)printf("您的车牌号为 %d 的车应交纳的费用是:%d\n",leanum,cost);if(Q.front!=Q.rear){//队列不空的话从便道进停车场DeQueue(Q,a);if(a.time<leatime) //便道车辆进车库时间应该比车库车辆离开时间晚entertime=leatime;a.time=leatime;Push(S,a);//该车进入停车场printf("车牌号为%d的车辆从便道上进入%d号车库!从现在开始计时,现在时间为:%d\n",a.num,S.top-S.base,a.time);}}else if(Check_Queue(Q,e)){ //从便道直接离开do{DeQueue(Q,a);EnQueue(Q,a);}while(Q.front->next->data.num!=e.num);DeQueue(Q,e);//前面的车进入队尾printf("您的车牌号为 %d 的车辆未进入车库从便道直接离开,费用为0!\n",e.num);}}return true;}//=====================================================================voidInitialization(){ //初始化程序printf("姓名:杨智伟学号:2012040651\n");printf("==========================================================\n");printf("* 停车场管理模拟程序 *\n");printf("==========================================================\n");printf("请依次输入车辆到达(A/a)/离去(D/d)/结束(E/e)信息、车牌号以及当前时间:\n\n");}//=====================================================================int main(){Initialization();CarNode car;SqStack Park,TempPark;LinkQueue Q;InitStack(Park);InitStack(TempPark);InitQueue(Q);while((scanf("%c%d%d",&car.event,&car.num,&car.time))&&(car.event!='e'&&car .event!='E')){getchar();//除去输入结束时的回车switch(car.event){case 'A':case 'a':Arrive(Park,Q,car);break;case 'D':case 'd':Leave(Park,TempPark,Q,car);break;default: printf("您的第一个数据输入有误!\n");break;}}printf("程序结束,谢谢使用!\n");return 0;}七、程序运行截图1.交互界面2.车辆进入3.车辆离去4.停车场已满进入便道5.便道车辆进入车库6.程序结束界面八、实验总结1.学会了栈和队列的综合使用,更加灵活运用栈和队列。

数据结构--停车场管理-完整版-实习报告

数据结构--停车场管理-完整版-实习报告

实习报告题目:停车场管理一.需求分析1.用栈来表示停车场,用队列来表示停车道。

2.用户需输入车辆的必要信息,如车辆的到达或离开,汽车牌号以及到达或离去的时刻。

停车场的容量及单位时间的停车费由编程序者自行设置,结构需输出车辆停车所需缴纳的费用。

3.本程序要求对车辆的动态能够输出具体的信息内容,包括停车或离开的时间,位置,及所需缴纳的停车费。

4.测试数据为:N=2,输入数据为:(’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’表示到达,’D’表示离去,’E’表示输入结束。

5.程序执行的命令为:1.创建栈和队列。

2.对车辆的行为进行相应的处理。

3.输出车辆的信息。

二.概要设计1.设定栈的抽象数据类型定义:ADT Stack{数据对象:D={ai|ai属于Elem,i=1,2……,n, n>=0}数据关系:R1={<ai-1, ai>| ai-1,ai属于D,i=2,……,n}基本操作:initStack(&S)操作结果:构造一个空栈S.pop(&S,&e)初始条件:栈S已存在。

操作结果:删除S的栈顶元素,并以e返回其值。

push(&S,&e )初始条件:栈S已存在。

操作结果:在栈S的栈顶插入新的栈顶元素e。

lengthstack(S)初始条件:栈S已存在。

操作结果:返回S中的元素个数,即栈的长度。

}ADT Stack;2.设定队列的抽象数据类型定义:ADT Queue{数据对象:D={ai| ai属于Elem, i=1,2,……,n, n>=0}数据关系:R1={<ai-1 ,ai>| ai-1,ai 属于D,i=2,……,n}基本操作:initqueue(&Q)操作结果:构造一个空队列Q.enqueue(&Q, e)初始条件:队列Q已存在。

数据结构-停车场管理系统实验报告

数据结构-停车场管理系统实验报告

数据结构-停车场管理系统实验报告数据结构停车场管理系统实验报告一、实验目的本次实验旨在通过设计和实现一个停车场管理系统,深入理解和应用数据结构的知识,包括栈、队列、链表等,提高编程能力和解决实际问题的能力。

二、实验环境本次实验使用的编程语言为C++,开发环境为Visual Studio 2019。

三、需求分析1、停车场内有固定数量的停车位。

2、车辆进入停车场时,记录车辆信息(车牌号、进入时间)。

3、车辆离开停车场时,计算停车费用并输出相关信息。

4、能够显示停车场内车辆的停放情况。

四、数据结构设计1、为了实现车辆的先进先出,选择队列来存储停车场内的车辆信息。

2、用栈来存储临时停放的车辆信息,以便在停车场已满时进行处理。

五、算法设计1、车辆进入停车场检查停车场是否已满。

如果未满,将车辆信息加入队列,并记录进入时间。

2、车辆离开停车场在队列中查找要离开的车辆。

计算停车时间和费用。

将车辆从队列中删除。

3、显示停车场内车辆停放情况遍历队列,输出车辆信息。

六、主要代码实现```cppinclude <iostream>include <string>include <ctime>using namespace std;//车辆结构体struct Car {string licensePlate; //车牌号time_t entryTime; //进入时间};//队列类class Queue {private:Car data;int front, rear, capacity;public:Queue(int size) {capacity = size;data = new Carcapacity;front = rear = 0;}~Queue(){delete data;}bool isFull(){return (rear + 1) % capacity == front;}bool isEmpty(){return front == rear;}void enqueue(Car car) {if (isFull()){cout <<"停车场已满!"<< endl; return;}datarear = car;rear =(rear + 1) % capacity;}Car dequeue(){if (isEmpty()){cout <<"停车场为空!"<< endl;return Car();}Car car = datafront;front =(front + 1) % capacity;return car;}void display(){if (isEmpty()){cout <<"停车场内没有车辆。

停车场实验报告

停车场实验报告

数据结构实验报告——实验二停车厂模拟管理程序的设计与实现本实验的目的是进一步理解线性表的逻辑结构和存储结构,进一步提高使用理论知识指导解决实际问题的能力。

一、【问题描述】设停车厂只有一个可停放几辆汽车的狭长通道,且只有一个大门可供汽车进出。

汽车在停车场内按车辆到达的先后顺序依次排列,若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可进入;当停车场内某辆车要离开时,由于停车场是狭长的通道,在它之后开入的车辆必须先退出车场为它让路,待该车辆开出大门,为它让路的车辆再按原次序进入车场。

在这里假设汽车不能从便道上开走,试设计这样一个停车厂模拟管理程序。

为了以下描述的方便,停车厂的停车场用“停车位”进行叙述,停车厂的便道用“便道”进行叙述。

二、【数据结构设计】1、为了便于区分每辆汽车并了解每辆车当前所处的位置,需要记录汽车的牌照号码和汽车的当前状态,所以为汽车定义一个新的类型CAR,具体定义如下:typedef struct{char *license_plate; //汽车牌照号码,定义为一个字符指针类型char state; //汽车当前状态,字符s表示停放在停车位上,//字符p表示停放在便道上,每辆车的初始状态用字符i来进行表示}2、由于车位是一个狭长的通道,所以不允许两辆车同时出入停车位,当有车到来要进入停车位的时候也要顺次停放,当某辆车要离开时,比它后到的车要先暂时离开停车位,而且越后到的车就越先离开停车位,显然这和栈的“后进先出”特点相吻合,所以可以使用一个栈来描述停车位。

由于停车位只能停放有限的几辆车,而且为了便于停车厂的管理,为每个车位要分配一个固定的编号,不妨设为1、2、3、4、5(可利用数组的下标),分别表示停车位的1车位、2车位、3车位、4车位。

5车位,针对这种情况使用一个顺序栈比较方便,具体定义如下:#define MAX_STOP 5typedef struct{CAR STOP[MAX_STOP]; //各汽车信息的存储空间int top; //用来指示栈顶位置的静态指针}STOPPING;3、当停车场的停车位上都已经停满了汽车,又有新的汽车到来时要把它调度到便道上,便道上的车辆要按照进入便道的先后顺序顺次存放在便道上,为便道上的每个位置也分配一个固定的编号,当有车从停车位上离开后,便道上的第一辆汽车就立即进入停车位上的某个车位,由于问题描述中限制了便道上的汽车不能从便道上开走,即便道上的汽车只有在停车位上停放过之后才能离开停车厂,这样越早进入便道的汽车就越早进入停车位,而且每次进入停车位的汽车都是处于便道“最前面”的汽车,显然,这和队列的先进先出特点相吻合,所以,这里使用一个顺序队来描述便道,可以利用数组的下标表示便道的位置,具体定义如下:#define MAX_PA VE 100 /*便道不限制停放车辆的数目,设为足够大*/typedef struct{CAR PA VE[MAX_PA VE]; //各汽车信息的存储空间int front,rear; //用来指示队头和队尾位置的静态指针}PA VEMENT;4、当某辆车要离开停车厂的时候,比它后进停车位的车要为它让路,而且当它开走之后让路的车还要按照原来的停放次序再次进入停车位的某个车位上,为了完成这项功能,再定义一个辅助栈,停车位中让路的车依次“压入”辅助栈,待提出开走请求的车开走后再从辅助栈的栈顶依次“弹出”到停车位中。

数据结构报告 停车场问题

数据结构报告 停车场问题

⒈问题描述:停车场管理问题[问题描述]设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。

车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。

如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。

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

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

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

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

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

[实现提示]汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去的时刻)。

例如,(‘A’,,1,5)表示1号牌照车在5这个时刻到达,而(‘D’,,5,20)表示5号牌照车在20这个时刻离去。

整个程序可以在输入信息为(‘E’,0,0)时结束。

本题可用栈和队列来实现。

⒉设计:⑴数据结构设计和核心算法设计描述;停车场管理系统是充分利用数据结构中栈和队列的思想实现的,栈是一种只能在叫做栈的一段进行进栈或者出栈操作的线性数据结构。

栈的主要特点是”后进先出”,即后进栈的元素先处理。

停车场的容量即为栈的存储空间,停车场的车辆的停靠是无秩序的,因此采用链式存储的方式更适合,也方便车辆的调度。

队列是限定仅能在表的一端进行插入,在表的另一端进行删除的线性表。

队列中可以插入的一端称为队尾,可以删除的一端称为队首。

把一个元素插入队列中的操作为进队,队列中删除一个元素的操作为出队。

队列存取操作符合:先进先出。

停车场的车辆到达停车和车辆的离开的管理方式就是采用队列的“先进先出”的移动的思想。

数据结构实验报告模拟停车场管理

数据结构实验报告模拟停车场管理

数据结构实验报告模拟停车场管理实验目的:通过模拟停车场管理的过程,理解数据结构的应用和实际工程问题的解决思路。

实验内容:1.设计停车场类和车辆类,并实现相关操作方法。

2.模拟停车场管理的过程,包括车辆的进入和离开。

3.根据实际需求设计停车场管理算法,如何选择停车位和调度车辆等。

实验步骤:1.设计停车场类停车场类需要保存停车位的信息,可以使用数组或链表实现。

需要提供以下方法:- void addCar(Car car):将车辆添加到停车场,如果停车场已满,则禁止入场。

- void removeCar(Car car):将车辆从停车场移除,并更新停车位信息。

- int getAvailableSpaces(:返回停车场中当前可用的停车位数量。

2.设计车辆类车辆类需要保存车辆的信息,如车牌号、车型等。

3.实现停车场管理算法停车场管理需要考虑车辆进入和离开的顺序,以及停车位的选择等问题。

可以使用队列或堆栈等数据结构来保存车辆的进出顺序。

停车位的选择可以根据具体算法进行,如先到先得、最近最便等原则。

4.完成模拟停车场管理过程的代码根据实际需求,编写代码模拟车辆进入和离开停车场的过程。

可以通过输入车辆信息和操作指令来模拟。

5.测试与优化对停车场管理算法进行测试,并根据实际情况进行优化。

可以通过增加数据量、调整车辆进出顺序等方式进行测试,并根据测试结果进行优化。

实验结果:经过实验测试,停车场管理系统可以良好地处理车辆的进入和离开,并正确计算可用停车位的数量。

通过合理的停车位选择算法,确保了车辆进出的顺序。

实验总结:通过本次实验,我们学习了如何利用数据结构来实现停车场管理系统。

停车场管理系统是一种常见的实际应用,对于解决停车难问题具有重要意义。

在实验过程中,我们掌握了设计和实现停车场类、车辆类以及停车场管理算法的方法,加深了对数据结构的理解和应用。

在实验过程中,我们还发现停车场管理算法可以通过不同的策略进行优化,如最大化停车利用率、最小化顾客等待时间等。

数据结构用栈和队列创建停车场管理系统实验报告

数据结构用栈和队列创建停车场管理系统实验报告

数据结构用栈和队列创建停车场管理系统实验报告一、实验背景及目的随着城市化进程的不断加速,车辆数量急剧增长,停车难成为了城市发展中的一个重要问题。

为了解决这一问题,需要建立高效的停车场管理系统。

数据结构中的栈和队列是常用的数据结构,可以用来创建停车场管理系统。

本次实验旨在通过使用栈和队列来创建一个停车场管理系统,并测试其功能。

二、实验原理及方法1. 停车场管理系统基本原理停车场管理系统主要包括三个部分:入口、出口和停车位。

当车辆到达入口时,需要检查是否有空余的停车位;如果有,则将其分配一个位置并记录下来;否则,需要让其等待直到有空余位置。

当车辆离开时,需要释放该位置并更新记录。

2. 使用栈和队列创建停车场管理系统(1)使用栈来模拟停车位由于每个停车位只能容纳一辆汽车,可以使用栈来模拟每个停车位。

当有新的汽车进入时,将其压入栈中;当汽车离开时,则将其从栈中弹出。

(2)使用队列来模拟等待区由于等待区可以容纳多辆汽车,可以使用队列来模拟等待区。

当有新的汽车到达时,将其加入队列尾部;当有车位空余时,则从队列头部取出一辆汽车进入停车场。

3. 实验步骤(1)创建停车场管理系统的数据结构:使用栈和队列分别来模拟停车位和等待区。

(2)实现停车场管理系统的基本操作:包括汽车进入、离开、查询空余停车位等操作。

(3)测试停车场管理系统的功能:模拟多辆汽车进出停车场,检查系统是否能够正确地分配和释放停车位,并且能够正确地记录空余停车位数。

三、实验结果与分析本次实验使用栈和队列创建了一个简单的停车场管理系统,并测试了其基本功能。

在测试过程中,我们模拟了多辆汽车进出停车场,并检查了系统能否正确地分配和释放停车位。

实验结果表明,该系统可以正常工作,并且能够正确地记录空余停车位数。

四、实验总结通过本次实验,我们学习了如何使用栈和队列来创建一个简单的停车场管理系统。

同时,我们也深刻认识到数据结构在实际应用中的重要性。

在今后的学习中,我们将继续深入学习数据结构,并探索其更广泛的应用。

c++数据结构,停车场系统 实验报告

c++数据结构,停车场系统  实验报告

HDU 软件工程学院《程序设计实践(下)》设计报告姓名学号专业班级10级软件工程6班提交日期成绩指导教师问题解析(对问题的分析、解题思路与解题方法)题目一: 停车场管理系统[实验目的]综合运用线性表、队列、排序、随机数等数据结构知识,掌握并提高分析、设计、实现及测试程序的综合能力。

[实验内容及要求]停车场拥有M个车位和一条进入停车场的便道,便道上最多停放N辆汽车。

汽车要想进入车位,首先进入便道等候。

若有空闲车位,则停车入位,否则在便道继续等候,直至有车位空出。

若便道已经停满等候的汽车,后到达的汽车只能离开,选择其他停车场。

设计一个停车场管理系统,模拟停车场的运作,并统计停车场的收入。

(1)使用随机数产生某一时间段内进入和离开停车场的车辆数目;(2)存储并记录如下数据项:汽车到达和离去的时间及汽车的车号;(3)车辆到达时,提示汽车的停车位置编号(为车辆分配编号最小的可用车位),若车位已满给出相应提示;(4)汽车离去时,输出汽车在停车场内停留的时间和应交纳的费用。

(5)对该停车场进行统计:统计每天到达、离开的车次,停车总时数、每天停车场的收入等。

[问题分析]停车场系统,可以利用之前写过的队列,链表,排序等知识实现模拟,可以手工输入车的牌号和进入时间,但是这样可能给测试人员带来一定的麻烦,我们可以利用随机数字定义一个数组来实现车牌的分配和时间的分配,车牌利用五位数来简单模拟,前两位用英文字母后三位用数字,这样分配的车牌有26*26*10*10*10=676000种可能,所以不用检查车牌号是否相同,这样就节省了很多用来查找的时间。

[解决思路]1、可以用队列模拟便道,利用入队列,出队列完成车辆的进入和离开的模拟。

题目要求,进入便道不计费,可以仅仅记录车牌来实现2、可用车位需按照编号排序,申请车位时分配编号最小的车位,可用车位动态变化,可以选择利用堆排序来实现,当出来一个车的时候,3、利用rand()随机产生随机数,来完成每小时进入车场的车辆和离开的车辆,对于车辆一小时离开的概率为25%,增加一小时离开的概率多加25%,可以用累加的形式,当车辆进入的时候,就分配给车辆一个参数,这个参数用来实现车辆在车场中的停留时间的记录4、车场刚开始,初始化的时候,就按顺序分配一些车场位置编号,用来记录与车牌对应的位置,停车场还有个参数,用来记录,此位置是否有车,如果有车就设置为true,如果没车就为false,用来统计车场中的车辆5、统计离开的车辆,当车辆离开的时候,就把参数设置为false[任务分工及进度计划]12月10号上午八点半-12月10中午完成类的设计,以及设计思路12月10号下午-12月11号全天完成类的实现12月11号-12月13号中间的空闲时间完成界面的美化和测试12月17号晚上-12月18号完成哈弗曼译码的设计和实现,由于之前这个程序已经写过,设计和编写都节省了很多时间12月19号-12月20号完成实验报告[数据结构选择、算法设计(伪代码,算法思想)]数据结构中设计到的算法有:1.队列2、链表(用结构体代替)--------------------------------------------主体函数---------------------------------------------#include <cstdlib>#include <iostream>#include "Car.h"#include "SeqQueue.h"#include"Park.h"#include <windows.h>#include <ctime>----------------------------------------------------------------------------------------------class Car{private:string chepai;string jinru_time;string likai_time;double begin;double end;double cost_money;public:Car();void shuruchepai(string );void jinru(string );void likai(string );void cost(double cost);double huafei();string getchepai()string getjinru()string getlikai()};--------------------------------------------------------------------------------------------emplate<class T>class SeqQueue{private:int front,rear;T *elem;int size;int len;public:SeqQueue(int size);~SeqQueue();bool IsEmpty();void enqueue(T x);T dequeue();int num();};-------------------------------------------------------------------------------------------------class Park{private:string chepai;string jinru_time;char likai_time[9];string likai2;double begin;double end;double cost_money;bool isempty;int stay_time;int times_likai;int weizhihaoma;double sum_money;public:Park(){ isempty=false;stay_time=0;times_likai=0;sum_money=0;}void shuruchepai(string a)void jinru(string a)-void weizhi(int a)void haha(string a)string gethaha()void sum_money1(double a)double money1()void likai(int k)void cost(double cost)double huafei()string getchepai()string getjinru()char* getlikai()void run()int getweizhihaoma()void setweizhihaoma(int a)void goaway()};---------------------------------------------------------------------------------------------class Che{public:Che();void ShuRuChePai(string);//输入车牌void JinRu(string);//输入车进入停车场的时间void LiKai(string);//输入车离开停车场的时间bool Compare(string);double ShuChuM(double);private:string s;//车牌号记录double st;//车到停车场的时间double et;//车离开停车场的时间};//车的类------------------------------------------------------------------------------------------------[测试方法、测试数据与测试结果]测试方法:需要输入停车场的停车位的数量和便道中可以等待的车位的数量,以及每小时停留在停车场中的花费。

数据结构停车场实习报告

数据结构停车场实习报告

一、实习背景随着我国经济的快速发展,城市车辆数量逐年攀升,停车难问题日益突出。

为了解决这一问题,我们需要设计一个高效、便捷的停车场管理系统。

本次实习以数据结构为基础,设计并实现了一个停车场管理系统。

二、实习目的1. 理解并掌握数据结构在实际问题中的应用;2. 提高编程能力和算法设计能力;3. 掌握停车场管理系统的设计与实现方法;4. 分析并解决实际问题。

三、系统设计1. 系统功能(1)车辆进出管理:实现车辆进入和离开停车场的功能,包括记录车辆信息、计算停车费用等。

(2)车位管理:实时显示停车场内剩余车位数量,实现车位分配和回收。

(3)数据统计:统计停车场使用情况,包括车辆进出次数、停车时间等。

(4)异常处理:处理车辆进出异常情况,如超时、非法操作等。

2. 数据结构设计(1)停车场:使用栈结构存储停车场内的车辆信息,栈底为停车场最里面,栈顶为停车场最外面。

(2)便道:使用队列结构存储便道上的车辆信息,队列头为便道最外面,队列尾为便道最里面。

(3)车辆信息:包括车辆牌照、进入时间、离开时间、停车费用等。

3. 算法设计(1)车辆进入停车场:判断停车场是否已满,若不满,则将车辆信息压入栈中;若满,则将车辆信息入队。

(2)车辆离开停车场:判断便道是否为空,若为空,则从栈中弹出车辆信息;若不为空,则从队列中出队车辆信息。

(3)计算停车费用:根据车辆停留时间计算停车费用。

四、实习过程1. 需求分析:了解停车场管理系统的基本需求,确定系统功能。

2. 设计阶段:设计系统架构、数据结构、算法等。

3. 编码阶段:根据设计文档,使用C++语言进行编程实现。

4. 测试阶段:编写测试用例,对系统进行功能测试、性能测试等。

5. 调试阶段:针对测试过程中发现的问题进行调试和优化。

五、实习结果1. 系统功能实现:停车场管理系统已实现车辆进出管理、车位管理、数据统计、异常处理等功能。

2. 数据结构应用:成功将栈和队列应用于停车场管理系统,提高了系统性能。

数据结构停车场收费系统管理实践报告

数据结构停车场收费系统管理实践报告

数据结构停车场收费系统管理实践报告停车场收费系统,这个话题一提起来,大家都不陌生。

说实话,谁没在大街小巷的停车场为了一块停车费而头疼过呢?尤其是在城市里,停车位稀缺,收费又是天价,弄得有时候进个停车场就像进了赌场,不知道到底会“亏”多少。

今天就聊聊我最近搞的一次“停车场收费系统管理实践”,说实话,整个过程就像是看一部高能悬疑片,既有趣又有点小紧张。

停车场的管理,说白了,就是得搞清楚停车位的利用率,然后合理收费,确保不亏本。

这听起来简单,但要做好,光靠脑袋里的想法可不行。

得用点“硬核”的东西,比如数据结构。

说到这里,很多人可能开始懵了:数据结构?那是啥?别担心,数据结构就是一堆有序的、按照特定规则组织起来的数据,简单点说,就是停车场的“内部管理”嘛。

比如你停车时,停车场会分配一个车位给你,那些车位就得按照一定的规则排序,不然你想找个位置就得像大海捞针一样。

我们做的这个停车场收费系统,首先就要搞清楚如何让停车位、车主和收费三个元素高效地“打交道”。

你想,假如停车场没有规则,那就乱套了,车位没人用,车主也找不到地方停车,收费自然就乱七八糟了。

搞清楚了这些,系统的基础架构就稳了。

说到收费,最常见的就是按时间收费。

我们通过程序算出来每个车主停车的时长,再按照预设的费用标准进行结算。

这里就得用到“链表”这个数据结构了。

车主的停车信息就像一颗颗“珠子”串在一起,每个珠子里面有车主的停车时间、车牌号、停车收费等数据。

如果一个车主停车时间很长,那收费就得按时间增加,反之,停车时间短,自然收费也少。

这种管理方式非常高效,不容易出错,而且能够快速计算每个车主的停车费。

哎,说实话,我一开始听到链表这俩字儿时,还挺疑惑的,感觉好像很“高大上”,但一弄明白后,才发现原来就是个简单又实用的东西,跟停车场的条理化管理一样,处理起来简洁又明了。

再说到停车收费的“智能化”,以前我们去停车场,不是排队等着人工收费,就是站在收费亭前一脸懵逼,不知道到底该怎么付。

c语言数据结构停车场系统实验报告

c语言数据结构停车场系统实验报告

实验题目:实验六停车场管理一、需求分析1.程序的功能:设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。

汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列〔大门在最南端,最先到达的第一辆车停放在车场的最北端〕,假设车场内已停满n辆汽车,那么后来的汽车只能在门外的便道上等候,一旦有车开走,那么排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。

〔1〕建立静态数组栈作为模拟停车场,动态链表栈作为模拟便道。

〔2〕车辆到达,停入停车场或者便道,记录车牌号,到达时间。

〔3〕车辆离开,记录离开时间,输出停车时间和收费。

将便道内车停入停车场,记录进入时间。

〔4〕列表显示停车场,便道内车辆情况。

〔5〕列表显示历史记录〔已经离开车的车牌号,到达离开时间,收费〕。

2.输入输出的要求:(1)输入:字符串车牌号,到达时间,离开时间(2)输出:停车时间和收费,停车场和便道的停车情况,历史记录。

3.测试数据:二.概要设计4.本程序所用的抽象数据类型的定义ADT Stack{数据对象:D={ai|ai为ElemSet,i为正整数}数据关系:R1={<ai-1,ai>|ai-1,ai都属于D,i为正整数}根本操作:InitStack(&S) //构建一个空栈SDestroyStack(&S) //S 被销毁StackLength(S) //返回S 的元素个数,即栈的长度。

StackEmpty(s) //假设栈S 为空栈,那么返回TRUE,否那么FALE。

GetTop(S, &e) //用e 返回S 的栈顶元素ClearStack(&S) //将S 清为空栈Push(&S, e) //入元素e 为新的栈顶元素。

数据结构实验报告—停车场问题

数据结构实验报告—停车场问题

数据结构实验报告—停车场问题《计算机软件技术基础》实验报告I—数据结构实验二:停车场管理问题一、问题描述1.实验题目:设停车场是一个可停放n 辆汽车的狭长通道,且只有一个大门可供汽车进出。

汽车在停车场按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端)。

若停车场已经停满n辆车,那么后来的车只能在门外的便道上等候。

一旦有车开走,则排在便道上的第一辆车即可开入。

当停车场某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场。

每辆停放在车场的车在它离开停车场时必须按它停留的时间长短缴纳费用。

试为停车场编制按上述要求进行管理的模拟程序。

2.基本要求:以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入数据的序列进行模拟管理。

每一组输入数据包括三个数据项:汽车的“到达”(‘A’表示)或“离去”(‘D’表示)信息、汽车标识(牌照号)以及到达或离去的时刻。

对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场或者便道上的停车位置;若是车辆离去,则输出汽车在停车场停留的时间和应缴纳的费用(便道上停留的时间不收费)。

栈以顺序结构实现,队列以链表结构实现。

3.测试数据:设n=2,输入数据为:(‘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’表示到达;‘D’表示离去,‘E’表示输入结束。

其中:(‘A’,1,5)表示1号牌照车在5这个时刻到达,而(‘D’,1,15)表示1号牌照车在15这个时刻离去。

二、需求分析1.程序所能达到的基本可能:本程序用来模拟一个可停放n辆车的停车场的停车管理问题。

停车场实验报告

停车场实验报告

停车场实验报告停车场实验报告一、引言停车场是城市交通管理中重要的组成部分,为了解决停车难题,提高停车效率,我们进行了一项停车场实验。

本实验旨在通过对停车场的观察和数据分析,探讨停车场管理的优化方法,以提供参考和建议。

二、实验设计1. 实验地点:我们选择了一家位于市中心的购物中心停车场作为实验场地。

2. 实验时间:实验持续了一周时间,从早上8点到晚上10点,覆盖了不同时间段的停车情况。

3. 实验方法:我们通过实地观察和数据记录的方式,对停车场的使用情况进行了统计和分析。

三、实验结果1. 停车位利用率:通过实地观察,我们发现停车场在高峰时段(如周末下午)停车位利用率较高,甚至出现了停车位紧张的情况;而在低峰时段(如工作日上午)停车位利用率较低,大量停车位闲置。

2. 停车时间分布:我们对停车时间进行了统计,发现停车时间主要集中在1小时以内,少数车辆停车时间超过2小时。

这说明停车场存在大量短时停车的情况,导致停车位资源浪费。

3. 停车流量:我们观察到停车场的进出口车流量较大,特别是在周末和节假日。

停车场的进出口通行效率较低,导致排队等候的情况较为普遍。

四、问题分析基于实验结果,我们对停车场管理存在的问题进行了分析:1. 停车位利用率不高:停车位利用率低主要是由于停车场在不同时间段的需求差异较大,缺乏灵活的调配机制。

2. 停车时间分布不均衡:大量短时停车导致停车位资源浪费,同时也给其他车辆带来了困扰。

3. 进出口通行效率低:进出口车流量大,而通行效率低下导致排队等候,影响了停车场的整体运营效率。

五、优化建议针对上述问题,我们提出以下优化建议:1. 引入智能停车系统:通过引入智能停车系统,实现停车位的动态调配,根据不同时间段的需求变化,合理分配停车资源,提高停车位利用率。

2. 实行分时段收费:对停车时间进行分时段收费,鼓励长时停车,减少短时停车,以优化停车时间分布。

3. 优化进出口布局:通过优化进出口的布局和道路设计,提高进出口通行效率,减少排队等候时间。

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

数据结构课程设计——停车场管理问题姓名:学号: 问题描述设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。

车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。

如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。

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

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

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

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

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

三、实现提示汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去的时刻)。

例如,(‘A',,1,5)表示1号牌照车在5这个时刻到达,而(‘ D ',,5,20)表示5号牌照车在20这个时刻离去。

整个程序可以在输入信息为(‘ E ',0,0)时结束。

本题可用栈和队列来实现。

四、需求分析停车场采用栈式结构,停车场外的便道采用队列结构(即便道就是等候队列)。

停车场的管理流程如下①当车辆要进入停车场时,检查停车场是否已满,如果未满则车辆进栈(车辆进入停车场);如果停车场已满,则车辆进入等候队列(车辆进入便道等候)。

②当车辆要求出栈时,该车到栈顶的那些车辆先弹出栈(在它之后进入的车辆必须先退出车场为它让路),再让该车出栈,其他车辆再按原次序进栈(进入车场)。

当车辆出栈完毕后,检查等候队列(便道)中是否有车,有车则从队列头取出一辆车压入栈中。

五、流程图六、详细设计1.本程序主要包含四个模块1)主程序模块int main(){Initialization。

;CarNode car;SqStack Park,TempPark;LinkQueue Q;InitStack(Park);InitStack (TempPark);InitQueue(Q);while((scanf("%c%d%d", &car.event, &car.num, &car.time))&&(car.event!='e'&&car.event!='E')) {getchar();switch(car.event){case 'A':case 'a':Arrive(Park,Q,car);break;case 'D':case 'd':Leave(Park,TempPark,Q,car);break;default: printf("您的第一个数据输入有误!\n");break;}}printf("程序结束,谢谢使用!\n");return 0;2) 分别构造空栈和空队列栈:Status InitStack(SqStack &S){ 〃构造一个空栈S.Stacksize=0;S.base=(CarNode*)malloc((MAX)*sizeof(CarNode));if(!S.base){exit(OVERFLOW);printf(”存储空间分配失败");}S.top=S.base;return OK;}队列:Status lnitQueue(LinkQueue &Q){ //构造一个空队列(带头结点) Q.front=Q.rear=(QueueNode*)malloc(sizeof(QueueNode));if(!Q.front){exit(OVERFLOW);printf("存储空间分配失败");}Q.front->next=NULL;Q.queuesize=O;return OK;3) 车辆到达处理Status Arrive(SqStack & S,LinkQueue & Q,CarNode & e){ // 车辆到达处理if((S.top-1)->time<=e.time){ // 时间处理if(!Check_Stack(S,e)&& !Check_Queue(Q,e)){ // 是否已存在if(S.top-S.base<MAX){Push(S,e);printf("成功进入停车场,在%d号车库!\n",S.top-S.base);return OK;}else{EnQueue(Q,e);printf("停车场已满,车辆进入便道,在%d号车位!\n",Q.queuesize);elseprintf("该牌照的车已存在,输入有误,请重新输入\n");return OK;}else{printf("时间输入有误,请重新输入!\n");return FALSE;}}4) 车辆离开处理Status Leave(SqStack & S,SqStack & TempS,LinkQueue & Q,CarNode &e){ //车辆离开处理CarNode a;int leatime,leanum;int entertime; //进入停车场时间int cost;if(!(Check_Stack(S,e) || Check_Queue(Q,e))){printf("数据输入错误,本停车场内无所查询车辆,请重新输入!\n");return true;}else{if(Check_Stack(S,e)) 〃若需要离开的车辆在停车场{if(e.num==(S.top-1)->num) // 车辆处在栈顶{Pop(S, a);leatime=e.time;leanum=e.num;entertime=a.time;printf(”车辆进入车库时间:%d\t现在(离开)时间:%d\t停留时「可:%d\t\n",entertime,leatime,leatime-entertime);}else //车辆处在栈中间{do{Pop(S,a); 〃从栈中依次退出Push(TempS,a); 〃依次进入临时栈}while((S.top-1)->num!=e.num);〃直到top 指针下一个位置的num=车牌号Pop(S, a); //该车离开leatime=e.time;leanum=e.num;entertime=a.time;printf("车进入停车场时间:%d\t现在(离开)时间:%d\t停留时「可:%d\t\n",entertime,leatime,leatime-entertime);do { 〃其余车辆按原来次序返回停车场Pop(TempS,a);Push(S,a);}while(TempS.top!=TempS.base);〃条件与上面不同,此时是全部回去}cost=(leatime-entertime)*price;if(cost>=0)printf("您的车牌号为%d的车应交纳的费用是:%d\n",leanum,cost);if(Q.front!=Q.rear){ //队列不空的话从便道进停车场DeQueue(Q,a);if(a.timevleatime) //便道车辆进车库时间应该比车库车辆离开时间晚entertime=leatime;a.time=leatime;Push(S,a); //该车进入停车场printf("车牌号为%d的车辆从便道上进入%d号车库!从现在开始计时,现在时间为:%d\n",a.num,S.top-S.base,a.time);}}else if(Check_Queue(Q,e)){ 〃从便道直接离开do{DeQueue(Q,a);EnQueue(Q,a);}while(Q.front->next->data.num!=e.num);DeQueue(Q,e); 〃前面的车进入队尾printf("您的车牌号为%d的车辆未进入车库从便道直接离开,费用为0!\n",e.num);}}return true;2.主要设计程序如下#include<stdio.h>#include<malloc.h>#include<stdlib.h>#define MAX 2 //停车场容量#define price 2 // 单价#define OK 1#define FALSE 0#define TRUE 1#define ERROR -1#define OVERFLOW -2typedef int Status;//typedef struct CarNode{int num;int time;}CarNode; 〃车辆信息结点typedef struct SqStack{CarNode *base;CarNode *top;int Stacksize;}SqStack; 〃栈(停车场)typedef struct QNode{CarNode data;struct QNode *next;}QueueNode; 〃便道结点typedef struct LinkQueue{QueueNode *front;QueueNode *rear;int queuesize;}LinkQueue; // 队列(便道)//===================================================================== Status lnitStack(SqStack & S){ 〃构造一个空栈S.Stacksize=O;S.base=(CarNode*)malloc((MAX)*sizeof(CarNode));if(!S.base){exit(OVERFLOW);printf("存储空间分配失败");}S.top=S.base;}//===================================================================== Status lnitQueue(LinkQueue & Q){ // 构造一个空队列(带头结点)Q.front=Q.rear=(QueueNode*)malloc(sizeof(QueueNode));if(!Q.front){exit(OVERFLOW);printf(”存储空间分配失败");}Q.front->next=NULL;Q.queuesize=O;return OK;}//===================================================================== Status GetTop(SqStack S,CarNode & e){ //返回栈顶元素if(S.top==S.base)return ERROR;e=*(S.top-1);return TRUE;}//===================================================================== Status Pop(SqStack & S,CarNode & e){ 〃删除栈顶元素if(S.top==S.base)return ERROR;e=*--S.top;return OK;}//===================================================================== Status Push(SqStack &S,CarNode e){// 插入元素为新的栈顶元素(在栈不满的前提下) if(S.top-S.base>=MAX)return FALSE;*S.top++=e;return OK;}//===================================================================== Status DeQueue(LinkQueue &Q,CarNode &e){ 〃删除队头元素(带头结点) if(Q.rear==Q.front)return ERROR;QueueNode *p=Q.front->next;e=p_>data;Q.front->next=p->next;if(p==Q.rear)Q.rear=Q.front;free(p);Q.queuesize--;return OK;}//===================================================================== Status EnQueue(LinkQueue & Q,CarNode e){ 〃插入新的队尾元素QueueNode *p=(QueueNode*)malloc(sizeof(QueueNode));if(!p)exit(OVERFLOW);p->data=e;p->next=NULL;Q.rear->next=p;Q.rear=p;Q.queuesize++;return OK;} //:Status Check_Stack(SqStack & S,CarNode e){〃车辆到达时车库内是否有同名车CarNode *Temp=S.base;while((Temp!=(S.top))&&( Temp->num!=e.num))Temp++;if((Temp==S.top))return FALSE;elsereturn TRUE;}//===================================================================== Status Check_Queue(LinkQueue & Q,CarNode e){// 车辆到达时便道上是否有同名车QueueNode *Temp=Q.front;while((Temp!=Q.rear) && (Temp->data.num!=e.num))Temp=Temp->next;if((Temp==Q.rear) && (Temp->data.num!=e.num))return FALSE;elsereturn TRUE;}//===================================================================== Status Arrive(SqStack & S,LinkQueue & Q,CarNode & e){ 〃车辆到达处理if((S.top-1)->time<=e.time){ // 时间处理if(!Check_Stack(S,e)&& !Check_Queue(Q,e)){ // 是否已存在if(S.top-S.base<MAX){Push(S,e);printf("成功进入停车场,在%d号车库!\n",S.top-S.base);return OK;} else{EnQueue(Q,e);printf(”停车场已满,车辆进入便道,在%d号车位!\n",Q.queuesize);}elseprintf("该牌照的车已存在,输入有误,请重新输入\n");return OK;}else{printf("时间输入有误,请重新输入!\n");return FALSE;}}//========================================================Status Leave(SqStack & S,SqStack &TempS,LinkQueue & Q,CarNode &e){ //车辆离开处理CarNode a;int leatime,leanum;int entertime; //进入停车场时间int cost;if(!(Check_Stack(S,e) || Check_Queue(Q,e))){printf("数据输入错误,本停车场内无所查询车辆,请重新输入!\n");return true;}else{if(Check_Stack(S,e)) //若需要离开的车辆在停车场{if(e.num==(S.top-1)->num) // 车辆处在栈顶{Pop(S, a);leatime=e.time;leanum=e.num;entertime=a.time;printf("车辆进入车库时间:%d\t现在(离开)时间:%d\t停留时「可:%d\t\n",entertime,leatime,leatime-entertime);}else //车辆处在栈中间{do{Pop(S,a); 〃从栈中依次退出Push(TempS,a); 〃依次进入临时栈}while((S.top-1)->num!=e.num);〃直到top 指针下一个位置的num=车牌号Pop(S, a); //该车离开leatime=e.time;leanum=e.num;entertime=a.time;printf("车进入停车场时间:%d\t现在(离开)时间:%d\t停留时「可:%d\t\n",entertime,leatime,leatime-entertime);do { 〃其余车辆按原来次序返回停车场Pop(TempS,a);Push(S,a);}while(TempS.top!=TempS.base);〃条件与上面不同,此时是全部回去}cost=(leatime-entertime)*price;if(cost>=0)printf("您的车牌号为%d的车应交纳的费用是:%d\n",leanum,cost);if(Q.front!=Q.rear){ //队列不空的话从便道进停车场DeQueue(Q,a);if(a.timevleatime) //便道车辆进车库时间应该比车库车辆离开时间晚entertime=leatime;a.time=leatime;Push(S,a); //该车进入停车场printf(”车牌号为%d的车辆从便道上进入%d号车库!从现在开始计时,现在时间为:%d\n",a.num,S.top-S.base,a.time);}}else if(Check_Queue(Q,e)){ 〃从便道直接离开do{DeQueue(Q,a);EnQueue(Q,a);}while(Q.front->next->data.num!=e.num);DeQueue(Q,e); 〃前面的车进入队尾printf("您的车牌号为%d的车辆未进入车库从便道直接离开,费用为0!\n",e.num);}}return true;}//=====================================================================void lnitialization(){ // 初始化程序printf("姓名:杨智伟学号:2012040651\n");printf("==========================================================\n");printf("* 停车场管理模拟程序*\n");printf("==========================================================\n");printf("请依次输入车辆到达(A/a)/离去(D/d)/结束(E/e)信息、车牌号以及当前时间:\n\n"); } //===================================================================== int main(){ Initialization();CarNode car;SqStack Park,TempPark;LinkQueue Q;InitStack(Park);InitStack (TempPark);InitQueue(Q);while((scanf("%c%d%d", &car.event, &car.num, &car.time))&&(car.event!='e'&&car.event!='E')) {getchar(); //除去输入结束时的回车switch(car.event){case 'A':case 'a':Arrive(Park,Q,car);break;case 'D':case 'd':Leave(Park,TempPark,Q,car);break;default: printf("您的第一个数据输入有误!\n");break;}}printf("程序结束,谢谢使用!\n");return 0;}七、程序运行截图1 .交互界面2 .车辆进入= =■==■= = = = =■ = = == = = = = = == = = = = = = == = = === = =* * r车场管理模拟程序请依次输人车辆到达<A/a>/离去<D/d>z结耒信息“车稈母以及当前吋厲h a1 S *成功进入停车场■在1容车库,2 10成功进入停车场•在2号车库?3. 车辆离去- 停车场管理模拟程序*LH.E=. = = = H,=. =.=:™S = =.=.= —— E. =.=.= —S=.=.=. = =S=.=.=. = B« = =.=.™S = =.=.= ——S = =. = S 请依次输入车辆到达<ftz a>z离去5”结束车牌号以及当前时间「a 1 5成功逬入停车场■在1号车眸?a 2 10成功进入停车场”在2号车库?d 1 5 出李进入僵丰场时冋汚圳在「离开)时百停留时间洱您的车楝寻为i關车应交纳的费用是洱4. 停车场已满进入便道- 停车场管理模拟程序*an23.= Z2.£:E;S3ZZ=SSE3iZS: = E12!E=.ZIZZSS.S=2Z = 2ZEi=S3Z2 = lZ=:ST3.= Er::3.J=SE22Z£-ESS.S2E = E.E3E.S!=.= £l=S2请依次输入辛辆到达“心"高去<w 结東CE/I信息、车牌号以及当前时间:甘 1 5成功进入停车场.在i昏车.库甲A 2 10成功进入停车场「在2号■车库甲霸鑼觀算轨交髓靈2时恥停留时间汨a 3 20咸功进入停车场•在去号车库甲衫车场已满.车辆进入侵道■在,号车位亍a 5 305. 便道车辆进入车库吓譽硼停留时恥¥入溥车库甲从现衽幵始计时,现衽时间为*6.程序结束界面八、实验总结i •学会了栈和队列的综合使用,更加灵活运用栈和队列。

相关文档
最新文档