数据结构停车场管理实验报告
停车场管理实验报告3篇
停车场管理实验报告第一篇:实验简介本次实验是关于停车场管理的,旨在探讨停车场的管理方法以及利用计算机技术对停车场进行智能管理的可行性。
实验过程中,我们首先对停车场的基本情况进行了调查和分析,并确定了停车场的布局和车位数量。
然后,我们设计了一个基于计算机视觉技术的车牌识别系统,能够自动识别汽车牌照,并将其和相应的车位绑定。
最后,我们开发了一个基于云端的管理系统,能够实时监控停车场的使用情况,统计收益和预测流量,优化停车场管理。
通过本次实验,我们希望能够提高停车场的利用率,降低管理成本,提高用户体验。
第二篇:实验步骤1. 调查和分析首先,我们对停车场的周边环境、车流量、停车需求等进行了调查和分析,并根据调查结果确定了停车场的布局和车位数量。
2. 设计车牌识别系统我们采取了基于计算机视觉技术的车牌识别系统,能够自动识别汽车牌照,并将其和相应的车位绑定。
该系统主要分为以下三个部分:(1)摄像头:采用高清摄像头,能够自动对焦和自动曝光,提高识别准确率。
(2)软件系统:采用OpenCV图像处理库进行开发,能够自动识别车牌,并提取车牌号码信息。
(3)数据存储:采用MySQL数据库进行存储,能够存储车牌号码和相应的车位信息,方便管理。
3. 开发管理系统我们开发了一个基于云端的管理系统,能够实时监控停车场的使用情况,统计收益和预测流量,优化停车场管理。
该系统主要包括以下功能:(1)实时监控:通过车牌识别系统和摄像头,能够实时监控停车场内的车辆,并提供车位信息和空余位置。
(2)预约停车:用户可以通过手机或网站进行预约停车,并预定相应的车位。
(3)收费管理:管理人员可以通过系统对停车场的收费进行监控和管理,能够统计收益和优化停车场营运。
4. 测试和优化最后,我们进行了系统的测试和优化,并对系统的性能进行了评估和改进,确保停车场管理系统的稳定和可靠性。
第三篇:实验结果与展望经过长时间的实验和努力,我们开发出了一套基于计算机视觉技术的停车场管理系统,能够实现车辆自动识别和智能管理。
数据结构停车场问题实验报告汇总
数据结构停车场问题实验报告汇总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辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。
停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。
每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。
编制一程序模拟该停车场的管理。
二、实现要求要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。
三、实现提示汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去的时刻)。
例如,(‘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.学会了栈和队列的综合使用,更加灵活运用栈和队列。
数据结构-停车场管理系统实验报告
数据结构-停车场管理系统实验报告数据结构停车场管理系统实验报告一、实验目的本次实验旨在通过设计和实现一个停车场管理系统,深入理解和应用数据结构的知识,包括栈、队列、链表等,提高编程能力和解决实际问题的能力。
二、实验环境本次实验使用的编程语言为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.设计停车场类和车辆类,并实现相关操作方法。
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)测试停车场管理系统的功能:模拟多辆汽车进出停车场,检查系统是否能够正确地分配和释放停车位,并且能够正确地记录空余停车位数。
三、实验结果与分析本次实验使用栈和队列创建了一个简单的停车场管理系统,并测试了其基本功能。
在测试过程中,我们模拟了多辆汽车进出停车场,并检查了系统能否正确地分配和释放停车位。
实验结果表明,该系统可以正常工作,并且能够正确地记录空余停车位数。
四、实验总结通过本次实验,我们学习了如何使用栈和队列来创建一个简单的停车场管理系统。
同时,我们也深刻认识到数据结构在实际应用中的重要性。
在今后的学习中,我们将继续深入学习数据结构,并探索其更广泛的应用。
数据结构设计报告停车场管理系统方案
数据结构设计报告停车场管理系统方案数据结构设计报告:停车场管理系统方案一、引言随着汽车数量的不断增加,停车场管理成为了一个重要的问题。
一个高效、准确、便捷的停车场管理系统对于提高停车场的运营效率、服务质量以及用户体验都具有重要意义。
本报告将详细介绍一种停车场管理系统的数据结构设计方案,旨在为相关开发人员提供参考。
二、需求分析(一)基本功能需求1、车辆的入场登记,包括车辆信息、入场时间等。
2、车辆的出场结算,根据停车时间计算费用。
3、车位的实时监控,显示空闲车位数量和位置。
4、数据的存储和查询,如车辆历史停车记录等。
(二)性能需求1、系统响应迅速,车辆入场和出场操作能够在短时间内完成。
2、数据的准确性和完整性,确保停车信息不丢失、不错误。
(三)用户需求1、为停车场管理人员提供简洁、直观的操作界面。
2、为车主提供清晰的停车引导和费用信息。
三、数据结构设计(一)车辆信息结构体```ctypedef struct {char licensePlate20; //车牌号time_t entryTime; //入场时间time_t exitTime; //出场时间float parkingFee; //停车费用} Vehicle;```(二)车位信息结构体```ctypedef struct {int parkingSpaceNumber; //车位编号int status; // 0:空闲 1:占用} ParkingSpace;```(三)停车场结构体```ctypedef struct {ParkingSpace parkingSpaces; //车位数组int totalSpaces; //总车位数Vehicle vehicles; //车辆数组int totalVehicles; //车辆总数} ParkingLot;```(四)数据存储1、使用文件存储停车场的基本信息,如总车位数等。
2、使用数据库存储车辆的停车记录,便于查询和统计。
数据结构停车场实习报告
一、实习背景随着我国经济的快速发展,城市车辆数量逐年攀升,停车难问题日益突出。
为了解决这一问题,我们需要设计一个高效、便捷的停车场管理系统。
本次实习以数据结构为基础,设计并实现了一个停车场管理系统。
二、实习目的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. 数据结构应用:成功将栈和队列应用于停车场管理系统,提高了系统性能。
数据结构停车场管理
数据结构停车场管理简介停车场管理是一项涵盖车辆进出、停放、缴费等多方面功能的系统。
为了实现停车场的高效管理,需要运用数据结构来进行实现。
在本文中,我们将介绍如何利用数据结构来实现停车场管理系统。
数据结构的应用停车场有许多可管理的事情,例如停车场的空余车位数、车辆的进出、缴费等等。
在这些功能中,有一些需要我们使用数据结构来简化实现和提高效率。
队列停车场的管理需要使用队列这种数据结构。
当一个车辆要停入停车场时,需要将它按照到达的时间先后排序,按顺序排队等待停车。
而车辆离开停车场时,则需要先进先出,也就是先离开停车场的车辆需要先交费,后离开。
这一过程需要用到队列。
栈在停车场管理中,可用栈来实现车辆的进出。
车辆在进入停车场时,需要将车辆的信息保存。
而在车辆离开停车场时,则需要将对应的信息出栈并完成缴费后,才能让车辆离开。
这一过程需要用到栈。
链表停车场的剩余车位数是一个变化的过程。
在每有一辆车进入停车场或者有一辆车辆离开停车场时,都要对剩余车位数做出相应的更改。
这一过程中,可以用链表来实现。
只需要将每一辆车对应的链表节点记录进来,每进入一辆车就将一个节点从链表中删除,每辆车离开停车场则将一个节点加入链表。
数据结构的具体应用现在我们将来看看停车场管理中具体的应用。
进入停车场当一辆车进入停车场时,需要执行以下操作:1.首先,要判断停车场是否已经满了。
若停车场已满,则无法允许车辆进入停车场。
2.若停车场未满,则需要将这辆车的信息加入栈中,用于管理和监测。
3.同时,还需要将这辆车按到达的时间加入到队列中,便于后续的管理。
4.最后,还需要更新停车场的剩余车位数,并将结果写入数据库中。
离开停车场当一辆车在完成缴费后离开停车场时,需要执行以下操作:1.首先,需要从栈中出栈,将车辆的信息拿出来。
2.然后,需要将这辆车从队列中删除,避免干扰后续车辆的出场。
3.接着,需要更新停车场的剩余车位数,将车位数加一,并将结果写入数据库中。
数据结构 停车场管理报告
实验二:停车场管理(栈和队列应用)班级学号姓名一、实验目的1 掌握队列和栈顺序存储结构和链式存储结构,以便在实际背景下灵活运用。
2 掌握栈和队列的特点,即先进后出与先进先出的原则。
3 掌握栈和队列的基本运算。
二、实验内容1 问题描述设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。
车辆按到达停车场时间的早晚,依次从停车场最里面向大门口处停放。
如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。
停车场内如有某辆车要开走,在它之后进入停车场的车都必须退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。
每辆车在离开停车场时,都应根据它在停车场内停留的时间长短来交费。
如果停留在便道上的车未进入停车场就要离去,允许其离开,不收停车费,并且仍然保持在便道上等待的车辆次序。
编制一个程序模拟该停车场的管理。
2 实现要求要求程序输出每辆车到达后的停车位置(停车场或便道),以及某辆车离开停车场时应该交纳的费用和它在停车场内停留的时间。
3 实现提示汽车的模拟输入信息格式可以为:(到达/离开,汽车牌照号码,到达/离开的时间)。
用栈和队列来模拟停车场和便道。
三、实验结果:头文件#define MAXSIZE 3#define price 0.4typedef struct time {int hour;int min;}Time;typedef struct car {char num[10];Time reach;Time leave;}CarNode;typedef struct SNode {CarNode *data1[MAXSIZE+1];int top;}SeqStackCar;typedef struct QNode {CarNode *data2;struct QNode *next;}QueueNode;typedef struct LQNode {QueueNode *front;QueueNode *rear;}LinkQueueCar;void InitStack(SeqStackCar *s);int InitQueue(LinkQueueCar *Q);void Display(CarNode *p,int place);int Arrival(SeqStackCar *s,LinkQueueCar *LQ);void Leave1(SeqStackCar *s1,SeqStackCar *s2,LinkQueueCar *LQ); void Leave2(LinkQueueCar *LQ);void List1(SeqStackCar *s);void List2(LinkQueueCar *LQ);源文件#include "car.h"#include<iostream>using namespace std;int i=0;void InitStack(SeqStackCar *s){int i;s->top=0;for(i=0;i<=MAXSIZE;i++)s->data1[s->top]=NULL;}int InitQueue(LinkQueueCar *Q){Q->front=new QueueNode;if(Q->front!=NULL){Q->front->next=NULL;Q->rear=Q->front;return 1;}elsereturn 0;}void Display(CarNode *p,int place){int A1,A2,B1,B2,time;cout<<"请输入离开的时间:";cin>>p->leave.hour;cin>>p->leave.min;while(p->leave.hour<p->reach.hour||p->leave.hour>23){cout<<"error!"<<endl;cout<<"请输入离开的时间:";cin>>p->leave.hour;cin>>p->leave.min;}cout<<endl;cout<<"离开车辆的车牌号为:";cout<<p->num<<endl;cout<<"其到达时间为: "<<p->reach.hour<<":"<<p->reach.min<<endl;cout<<"其离开时间为: "<<p->leave.hour<<":"<<p->leave.min<<endl;A1=p->reach.hour;A2=p->reach.min;B1=p->leave.hour;B2=p->leave.min;time=(B1-A1)*60+(B2-A2);cout<<"该车停在停车场中的时间:"<<time<<"分钟!"<<endl;cout<<"应交费用为: "<<time*price<<"元!"<<endl;cout<<endl;}int Arrival(SeqStackCar *s,LinkQueueCar *LQ){CarNode *p;QueueNode *t;p=new CarNode;cout<<"请输入车牌号(例:A1234):";cin>>p->num;if(s->top<MAXSIZE){s->top++;cout<<"车辆在车场第"<<s->top <<"位置!"<<endl;cout<<"请输入到达时间:";cin>>p->reach.hour;cin>>p->reach.min;while(p->reach.hour<0||p->reach.hour>23||p->reach.min<0||p->reach.min>59) {cout<<"error!"<<endl;cout<<"请输入到达时间:";cin>>p->reach.hour;cin>>p->reach.min;}s->data1[s->top]=p;return 1;}else{cout<<"该车停在便道上!"<<endl;t= new QueueNode;t->data2=p;t->next=NULL;LQ->rear->next=t;LQ->rear=t;i++;cout<<"车辆在便道"<<i<<"个位置!"<<endl;return 1;}}void Leave1(SeqStackCar *s1,SeqStackCar *s2,LinkQueueCar *LQ) {int place;CarNode *p,*t;QueueNode *q;if(s1->top>0){while(1){cout<<"请输入车在车场的位置1--"<<s1->top<<":";cin>>place;if(place>=1&&place<=s1->top) break;}while(s1->top>place){s2->top++;s2->data1[s2->top]=s1->data1[s1->top];s1->data1[s1->top]=NULL;s1->top--;}p=s1->data1[s1->top];s1->data1[s1->top]=NULL;s1->top--;while(s2->top>=1){s1->top++;s1->data1[s1->top]=s2->data1[s2->top];s2->data1[s2->top]=NULL;s2->top--;}Display(p,place);if((LQ->front!=LQ->rear)&&s1->top<MAXSIZE){q=LQ->front->next;t=q->data2;s1->top++;cout<<"便道的"<<t->num<<"号车进入车场第"<<s1->top<<"位置!"<<endl;cout<<"请输入到达的时间:";cin>>t->reach.hour;cin>>t->reach.min;if(t->reach.hour<0||t->reach.hour>23||t->reach.min<0||t->reach.min>59){cout<<"error!"<<endl;cout<<"请输入到达时间:";cin>>t->reach.hour;cin>>t->reach.min;}LQ->front->next=q->next;if(q==LQ->rear)LQ->rear=LQ->front;s1->data1[s1->top]=t;delete q;}elsecout<<"便道里没有车!"<<endl;}elsecout<<"停车场里没有车!"<<endl;}void Leave2(LinkQueueCar *LQ){QueueNode *q;CarNode *t;if(LQ->front!=LQ->rear){q=LQ->front->next;t=q->data2;LQ->front->next=q->next;if(q==LQ->rear)LQ->rear=LQ->front;delete q;cout<<"便道上车牌号为"<<t->num<<"的车从便道上离开!"<<endl;}elsecout<<"便道里没有车!"<<endl;}void List1(SeqStackCar *s){int i;if(s->top>0){cout<<" 位置到达时间车牌号"<<endl;for(i=1;i<=s->top;i++){cout<<" "<<i<<" "<<s->data1[i]->reach.hour<<":"<<s->data1[i]->reach.min<<" "<<s->data1[i]->num<<endl;}}elsecout<<"停车场里没有车!"<<endl;}void List2(LinkQueueCar *LQ){QueueNode *p;p=LQ->front->next;if(LQ->front!=LQ->rear){cout<<"便道上车的车牌号为:"<<endl;while(p!=NULL){cout<<p->data2->num<<endl;p=p->next;}}elsecout<<"便道上没有车!"<<endl;}测试文件#include "car.h"#include<iostream>using namespace std;void main(){SeqStackCar s1,s2;LinkQueueCar LQ; int m;InitStack(&s1);InitStack(&s2);InitQueue(&LQ);while(1){cout<<"★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;cout<<"1.车辆到达2.离开停车场3.离开便道4.停车场列表5.便道列表6.退出系统"<<endl;cout<<"★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;cin>>m;switch(m){case 1:Arrival(&s1,&LQ);break;case 2:Leave1(&s1,&s2,&LQ);break;case 3:Leave2(&LQ);break;case 4:List1(&s1);break;case 5:List2(&LQ);break;case 6:exit(0);default: break;}}}(两运行结果:个图表联在一起)四、实验总结1.学会了栈和队列的综合使用,更加灵活运用栈和队列。
《数据结构》停车场系统设计报告--停车场管理系统_
《数据结构》停车场系统设计报告--停车场管理系统_一、系统总体原则1.1、系统的安全性:停车场管理系统要求引入多重安全措施,确保其系统数据的安全,以防止非法黑客进行攻击;系统本身要具备安全保护机制,确保核心系统重要功能不能被破坏。
1.2、系统功能:停车场管理系统要具备通行证管理,车辆管理,收费管理,维修管理,系统权限控制和固定车位管理等多种功能。
1.3、系统数据管理:停车场管理系统要实现对用户信息,车辆信息,收费信息,维修信息和工作日志等数据的便捷管理;支持数据注入,报表输出,日志查询,备份恢复等。
二、系统数据结构2.1、用户信息结构:用户类型、用户名、密码、真实姓名、联系电话、优惠折扣比、优惠申请次数等2.2、车辆信息结构:车牌号、车牌颜色、停放位置、停放时间、收费金额等2.3、收费信息结构:收费时间、车牌号、应缴金额、实缴金额、优惠金额、收费员等2.4、维修信息结构:维修时间、车牌号、维修内容、维修费用、维修人等2.5、工作日志结构:日志类型、生成时间、触发时间、操作内容、操作人等三、系统模块设计通行证管理模块:能够管理停车场的客户信息,支持优惠折扣的设置,支持多种客户角色的分配及权限管理。
车辆管理模块:能够管理停车场的车辆信息,支持分配停车位、跟踪车辆停放时间以及出入位置,以实现计算停车费用。
收费管理模块:能够实现车辆停放费用的计费与收取,支持优惠计算功能,支持收费记录的查询与管理。
维修管理模块:能够管理停车场的车辆维修信息,能够针对每辆车的维修记录进行查询、录入和管理。
系统权限控制模块:支持可根据多种角色分配权限,以实现系统模块及功能的控制,保证信息安全性。
固定车位管理模块:能够支持固定车位信息的管理,可支持用户管理固定车位,以便系统自动识别用户并提供优惠处理。
四、系统实现方案4.1 前端 : 对停车场系统进行交互式操作,支持web,客户端,短信等界面,实现用户的操作及查询;前端应用可跨平台进行。
数据结构停车场收费系统管理实践报告
数据结构停车场收费系统管理实践报告停车场收费系统,这个话题一提起来,大家都不陌生。
说实话,谁没在大街小巷的停车场为了一块停车费而头疼过呢?尤其是在城市里,停车位稀缺,收费又是天价,弄得有时候进个停车场就像进了赌场,不知道到底会“亏”多少。
今天就聊聊我最近搞的一次“停车场收费系统管理实践”,说实话,整个过程就像是看一部高能悬疑片,既有趣又有点小紧张。
停车场的管理,说白了,就是得搞清楚停车位的利用率,然后合理收费,确保不亏本。
这听起来简单,但要做好,光靠脑袋里的想法可不行。
得用点“硬核”的东西,比如数据结构。
说到这里,很多人可能开始懵了:数据结构?那是啥?别担心,数据结构就是一堆有序的、按照特定规则组织起来的数据,简单点说,就是停车场的“内部管理”嘛。
比如你停车时,停车场会分配一个车位给你,那些车位就得按照一定的规则排序,不然你想找个位置就得像大海捞针一样。
我们做的这个停车场收费系统,首先就要搞清楚如何让停车位、车主和收费三个元素高效地“打交道”。
你想,假如停车场没有规则,那就乱套了,车位没人用,车主也找不到地方停车,收费自然就乱七八糟了。
搞清楚了这些,系统的基础架构就稳了。
说到收费,最常见的就是按时间收费。
我们通过程序算出来每个车主停车的时长,再按照预设的费用标准进行结算。
这里就得用到“链表”这个数据结构了。
车主的停车信息就像一颗颗“珠子”串在一起,每个珠子里面有车主的停车时间、车牌号、停车收费等数据。
如果一个车主停车时间很长,那收费就得按时间增加,反之,停车时间短,自然收费也少。
这种管理方式非常高效,不容易出错,而且能够快速计算每个车主的停车费。
哎,说实话,我一开始听到链表这俩字儿时,还挺疑惑的,感觉好像很“高大上”,但一弄明白后,才发现原来就是个简单又实用的东西,跟停车场的条理化管理一样,处理起来简洁又明了。
再说到停车收费的“智能化”,以前我们去停车场,不是排队等着人工收费,就是站在收费亭前一脸懵逼,不知道到底该怎么付。
停车场管理实验报告
停车场管理实验报告一、实验目的:通过对停车场管理的实际操作,掌握停车场管理的基本流程、技巧和方法,提高停车场管理的效率和质量。
二、实验原理:停车场管理是指对停放在停车场内的车辆进行有序管理和监督的过程。
其主要内容包括车辆的进出登记,停车位的分配,车辆停放位置的调整等。
通过合理的管理和监督,可以提高停车场的利用率,缩短停车时间,避免车辆拥堵,提高停车场的收益。
三、实验步骤:1.登记车辆信息:对每辆进入停车场的车辆进行登记,包括车辆的品牌、颜色、车牌号等信息。
2.分配停车位:根据停车场的空余停车位数量和车辆的类型,为车辆分配合适的停车位。
3.调整停车位置:当车辆数量较多时,根据实际情况进行停车位置的调整,以便保证每辆车都能停放到合适的位置。
4.缴费离场:当车主停车结束后,需要缴纳相应的停车费用,收取费用后放行车辆。
四、实验结果:通过实验,我们发现采用合理的停车场管理方法可以提高停车场的利用率和效益。
在实验过程中,我们按照停车场管理的基本流程进行操作,及时登记车辆信息,合理分配停车位,并根据实际情况进行停车位置的调整。
通过合理管理和调整,车辆停放得更加有序,效率和质量得到了显著提高。
五、实验总结:本实验通过对停车场管理的实际操作,使我们更加深入地了解和掌握了停车场管理的基本流程、技巧和方法。
合理的停车场管理可以提高停车场的利用率和效益,减少车辆拥堵,为车主提供更好的服务。
在今后的实践中,我们需要进一步学习和掌握停车场管理的相关知识和技巧,不断提高停车场管理的水平和质量。
六、实验感想:通过这次停车场管理实验,我对停车场管理的重要性有了更深刻的认识。
合理的停车场管理对于提高停车场利用率和效益具有重要意义。
在实际操作过程中,需要注重细节,如及时登记车辆信息,合理分配停车位以及根据实际情况调整停车位置。
我希望通过今后的学习和实践,不断提升自己的停车场管理能力,为社会交通管理贡献力量。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
停车场管理实验报告学院:计算机工程学院班级:计算1414 姓名:李连活一.实验目的和要求熟练栈和队列的结构特性,掌握在实际问题背景下的应用二.实验主要内容以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包括三个数据项:汽车“达到”或“离去”信息、汽车牌照号码以及达到或离去的时刻。
对每一组输入数据进行操作后的输出信息为:若是车辆达到、则输出汽车在停车场内或便道上停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
栈以顺序结构实现,队列以链表结构实现。
三.实验仪器和环境PC机Windows 8.1 Visual c++ c语言四.实验原理1.概要设计(1)抽象数据类型定义ADT Stack{数据对象:D={ai|ai ∈ElemSet, i=1,2,…n;n>0}数据关系:R1={<ai-1,ai>|ai-1,ai ∈D,i=2,…n}基本操作:InitStack(&S)操作结果:构造一个空栈S。
Push(&S,e)初始条件:栈S已存在。
操作结果:插入e为新的栈顶元素Pop(&S,&e)初始条件:栈S已存在。
操作结果:删除S的栈顶元素,并且用e返回。
}ADT StackADT Queue {数据对象:D={ai|ai ∈ElemSet, i=1,2,…n; n>0}数据关系:R1={<ai-1,ai>|ai-1,ai ∈D, i=2,…n}其中:a1为队头, an为队尾基本操作:InitQueue(&Q);操作结果:构造一个空队列QEnQueue(&Q,&e);初始条件:对列Q已存在。
操作结果:插入元素e为Q的新队尾元素。
DeQueue(&Q,&e);初始条件:对列Q已存在。
操作结果:删除Q的队头元素, 并用e返回。
}ADT Queue(2)本程序包含七个模块:<1>主程序模块,其中主函数为Void main(){初始化;构造空栈;输入已知数据;插入数据入栈;分析{入栈;出栈;入队;出队;}输出数据;}<2>构造栈模块-----构造一个空栈;栈插入模块-----插入新的数据元素;栈删除模块-----删除指定的数据元素;构造队列模块-----构造一个空队列;队列插入模块-----插入新的数据元素;队列删除模块-----删除指定的数据元素;(3)各模块之间的调用关系如下:2.详细设计<1>类型定义#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define MONEY 3typedef int Status;typedef struct ElemType{char a[3];int num;int time;}ElemType;typedef struct SqStack {ElemType *base;//在栈构造之前和销毁之后,base的值为NULLElemType *top;//栈顶指针int stacksize;//当前已经分配的存储空间,以元素为单位}SqStack;//栈的表示typedef struct QNode{ElemType data;struct QNode *next;}QNode,*QueuePtr;//队列的表示typedef struct LinkQueue{QueuePtr front;//队头指针QueuePtr rear;//队尾指针}LinkQueue;<2>栈和队列的基本操作Status InitStack(SqStack &S)//构造一个空栈Status Push(SqStack &S,ElemType e)//插入元素e为新的栈顶元素Status Pop(SqStack &S,ElemType &e)//若栈不空,则删除S的栈顶元素,用e 返回其值,并返回OK;否则返回ERROR Status InitQueue(LinkQueue &Q)//构造一个空队列QStatus EnQueue(LinkQueue &Q,ElemType e)//插入元素e为Q的新队列Status DeQueue(LinkQueue &Q,ElemType &e)//若队列不空,则删除Q的对头元素,用e返回其值,并返回Ok;否则返回ERROR;<3>部分操作的算法Status InitStack(SqStack &S){//构造一个空栈S.base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));if(!S.base) exit (OVERFLOW);S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;}Status Push(SqStack &S,ElemType e){//插入元素e为新的栈顶元素if(S.top-S.base>=S.stacksize){//栈满,追加存储空间S.base=(ElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemType));if(!S.base) exit(OVERFLOW);//存储分配失败S.top=S.base+S.stacksize;S.stacksize+=STACK_INIT_SIZE;}*S.top++=e;return OK;}Status Pop(SqStack &S,ElemType &e){//若栈不空,则删除S的栈顶元素,用e 返回其值,并返回OK;否则返回ERROR if(S.top==S.base) return OK;e=*--S.top;return OK;}//----------------队列Status InitQueue(LinkQueue &Q){//构造一个空队列QQ.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));if(!Q.front) exit (OVERFLOW);//存储分配失败Q.front->next=NULL;return OK;}Status EnQueue(LinkQueue &Q,ElemType e){//插入元素e为Q的新队列p=(QueuePtr)malloc(sizeof(QNode));//存储分配失败if(!p) exit(OVERFLOW);p->data=e;p->next=NULL;Q.rear->next=p;Q.rear=p;return OK;}Status DeQueue(LinkQueue &Q,ElemType &e){//若队列不空,则删除Q的对头元素,用e返回其值,并返回Ok;否则返回ERROR;if(Q.front==Q.rear) return ERROR;p=Q.front->next;e=p->data;Q.front->next=p->next;if(Q.rear==p) Q.rear=Q.front;free(p);return OK;}五.源程序Stop1.h:#include <stdio.h>#include <process.h>#include <malloc.h>#include <string.h>//------------------------函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define TNFEASIBLE -1#define OVERFLOW -2//Status 是函数的类型,其值是函数结果状态代码typedef int Status;#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define MONEY 3Stop2.h:#include"stop1.h"typedef struct ElemType{char a[3];int num;int time;}ElemType;typedef struct SqStack{ElemType *base;ElemType *top;int stacksize;}SqStack;//栈的表示typedef struct QNode{ElemType data;struct QNode *next;}QNode,*QueuePtr;//队列的表示typedef struct LinkQueue{QueuePtr front;//队头指针QueuePtr rear;//队尾指针}LinkQueue;Status InitStack(SqStack &S);//构造空栈Status Push(SqStack &S,ElemType e);//进栈Status Pop(SqStack &S,ElemType &e);//出栈Status InitQueue(LinkQueue &Q);//构造一个空队列Status EnQueue(LinkQueue &Q,ElemType e);//入队Status DeQueue(LinkQueue &Q,ElemType &e);//出队Stop.cpp:#include"stop2.h"Status InitStack(SqStack &S){//构造空栈S.base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));if(!S.base) exit(OVERFLOW);S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;}Status Push(SqStack &S,ElemType e){//插入元素e为新的栈顶元素if(S.top-S.base>=S.stacksize){//栈满,追加存储空间S.base=(ElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemType));if(!S.base) exit(OVERFLOW);S.top=S.base+S.stacksize;S.stacksize+=STACK_INIT_SIZE;}*S.top++=e;return OK;}Status Pop(SqStack &S,ElemType &e){//出栈if (S.top==S.base) return OK;e=*--S.top;return OK;}/***********************************************************************队列*/ Status InitQueue(LinkQueue &Q){//构造一个空队列Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));if(!Q.front) exit(OVERFLOW);Q.front->next=NULL;return OK;}Status EnQueue(LinkQueue &Q,ElemType e){//插入元素e为Q的新队列struct QNode *p;p=(QueuePtr)malloc(sizeof(QNode));if(!p) exit(OVERFLOW);p->data=e;p->next=NULL;Q.rear->next=p;Q.rear=p;return OK;}Status DeQueue(LinkQueue &Q,ElemType &e){struct QNode *p;if(Q.front=Q.rear) return ERROR;p=Q.front->next=p->next;if(Q.rear==p) Q.rear=Q.front;free(p);return OK;}Stop_main.cpp:#include"stop2.h"main(){int i,t,f,m,n,s1_num,Q_num;struct SqStack s1,s2;struct LinkQueue Q;struct ElemType e,e1;s1_num=0;Q_num=0;t=0;m=0;InitStack(s1);InitStack(s2);InitQueue(Q);printf("停车场的容量是:");scanf("%d",&n);printf("输入车辆信息(E为退出,A为进入标志,D为离开标志,车牌号时间空格隔开):\n");scanf("%s",e1.a);scanf("%d%d",&e1.num,&e1.time);while(strcmp(e1.a,"E")!=0){if(strcmp(e1.a,"A")==0) {//当有车辆进来的时候if(s1_num<n) {Push(s1,e1);s1_num++;printf("此车停在停车场第%d辆\n",s1_num);}else {EnQueue(Q,e1);Q_num++;printf("此车停在便道距离门口第%d辆\n",Q_num);}}else if(strcmp(e1.a,"D")==0) {//当有车辆离开的时候f=s1_num;for(i=0;i<f;i++){Pop(s1,e);s1_num--;if(e1.num==e.num){t=e1.time-e.time;m=MONEY*t;printf("此车停车时间%d,所需费用%d元\n",t,m);break;}else Push(s2,e);}if(t==0&&m==0){printf("此车为便道内车,故无需收费\n");Q_num--;}while(s2.top!=s2.base){Pop(s2,e);Push(s1,e);s1_num++;}if(Q.front!=Q.rear){DeQueue(Q,e);Push(s1,e);s1_num++;}}else printf("错误\n");printf("输入数据\n");scanf("%s",e1.a);scanf("%d%d",&e1.num,&e1.time);}}六.实验步骤及调试分析1.输入数据为n=2,(“A”,1,2), (“A”,2,3), (“D”,1, 20), (“A”,3,6),(“A”,4 ,9),(“D”,2, 50), (“E”,0,0), 2.(1)本试验难度较高,除了对书上介绍算法应用还要分析怎么样调用函数,什么时候调用,以及抽象的空间想象停车场的结构,作业完成艰难。