数据结构实验二:停车场管理问题.doc
实验二、停车场管理系统
实验二:停车场管理问题一、问题描述1、实验题目:设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车停在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端)。
若停车场内已经停满n辆车,那么后来的车只能在门外的便道上等候。
一旦有车开走,则排在便道上的第一辆车即可进入。
当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原来的次序进入车场。
每辆停放在车场的车在它离开停车场时必须按它停留的时间长短缴纳费用。
2、基本要求:为停车场编制按上述要求进行管理的模拟程序。
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、本程序是模拟现实生活中的停车场管理系统,有较强的实用性,及较高的可靠性。
2、该程序具有友好的用户界面,操作多样,管理方面。
3、用户根据提示选择相应的操作,并根据提示输入每辆车的信息。
三、概要设计1、停车场的管理流程分析:①当车辆进入停车场时,首先检查停车场是否已满,若未满,车辆进入停车场,若已满,车辆进入便道等候。
②当车辆要求离开时,先让在它之后进入的车辆退出停车场为它让路,再让该车退出停车场,之后,让路的所有车辆再按其原来进入停车场的次序进入停车场。
再检查便道上是否还有车等候,有车则让最先等候的那辆车进入停车场。
2、数据结构分析由于停车场只有一个大门,当停车场内某辆车要离开时,在它之后的车辆必须先退出停车场为它让路,先进停车场的后退出,符合“先进后出”的特点,所以用一个栈来模拟停车场。
数据结构停车场问题
park[Ntop].Carnumber = p->bcar.Carnumber;
park[Ntop].ADtime = aCar.ADtime;
Northroad->next = p->next;
delete p;
}
if(Southroad->next != NULL && Northroad->next == NULL)
BCar *Southroad; //南门便道起始指针
BCar *Southtail; //南门便道尾指针
int n; //停车场车位数
int fee; //单位时间的停车费用
int Stop; //停车场栈南头指针
int Ntop; //停车场栈北头指针
int Temptop; //临时转车场栈头指针
{
cout<<"车到达时间输入有误!(时间要小于之前车辆到达的时间)"<<endl;
cout<<"重新输入车的信息!"<<endl;
continue;
}
for(i = Ntop;i < n;i++)
{
if(park[i].Carnumber == aCar.Carnumber)
{
cout<<"车牌号码已经存在!重新输入车的信息!"<<endl;
设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车出进。汽车在停车场内按车辆到达的时间先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在他之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它的车辆在按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短缴纳费用。试为停车场编制按上述要求进行管理的模拟程序
数据结构停车场管理实验报告
数据结构停车场管理实验报告一、实验目的本次实验旨在通过设计和实现一个停车场管理系统,深入理解和应用数据结构中的栈和队列等知识,提高解决实际问题的能力。
二、实验环境编程语言:C++开发工具:Visual Studio三、实验原理1、停车场采用栈结构来存储停放的车辆信息。
栈具有先进后出的特点,符合车辆先进入停车场后离开的逻辑。
2、停车场外的便道采用队列结构来存储等待进入停车场的车辆。
队列具有先进先出的特点,符合车辆按到达顺序进入停车场的需求。
四、实验内容1、设计数据结构定义栈和队列的数据结构,包括存储车辆信息的结构体。
实现栈和队列的基本操作,如入栈、出栈、入队、出队等。
2、功能实现车辆进入停车场:当有车辆进入停车场时,将车辆信息压入栈中。
车辆离开停车场:当有车辆离开停车场时,从栈中弹出相应车辆,并计算停车费用。
显示停车场状态:实时显示停车场内车辆的信息。
处理便道上的车辆:当停车场有空位时,将便道上的车辆依次入停车场。
3、界面设计设计简单的命令行交互界面,方便用户输入操作指令。
五、实验步骤1、定义数据结构```cppstruct Car {int carNumber;int arrivalTime;int departureTime;};class Stack {private:Car stackArray;int top;int capacity;public:Stack(int size) {capacity = size;stackArray = new Carcapacity; top =-1;}~Stack(){delete stackArray;}bool isFull(){return top == capacity 1;}bool isEmpty(){return top ==-1;}void push(Car car) {if (!isFull()){stackArray++top = car;} else {std::cout <<"停车场已满,无法进入!"<< std::endl;}}Car pop(){if (!isEmpty()){return stackArraytop;} else {std::cout <<"停车场为空,无法离开!"<< std::endl; return {-1, -1, -1};}}Car peek(){if (!isEmpty()){return stackArraytop;} else {std::cout <<"停车场为空!"<< std::endl; return {-1, -1, -1};}}};class Queue {private:Car queueArray;int front;int rear;int capacity;public:Queue(int size) {capacity = size;queueArray = new Carcapacity;front = rear =-1;}~Queue(){delete queueArray;}bool isFull(){return (rear + 1) % capacity == front;}bool isEmpty(){return front ==-1;}void enqueue(Car car) {if (!isFull()){if (isEmpty()){front = 0;}rear =(rear + 1) % capacity; queueArrayrear = car;} else {std::cout <<"便道已满,无法等待!"<< std::endl;}}Car dequeue(){if (!isEmpty()){Car car = queueArrayfront;if (front == rear) {front = rear =-1;} else {front =(front + 1) % capacity;}return car;} else {std::cout <<"便道为空!"<< std::endl;return {-1, -1, -1};}}Car frontElement(){if (!isEmpty()){return queueArrayfront;} else {std::cout <<"便道为空!"<< std::endl;return {-1, -1, -1};}}};```2、主函数实现```cppint main(){int parkingLotCapacity = 10; //假设停车场容量为 10 Stack parkingLot(parkingLotCapacity);Queue waitingQueue(parkingLotCapacity);int choice;while (true) {std::cout <<"1、车辆进入停车场" << std::endl;std::cout <<"2、车辆离开停车场" << std::endl;std::cout <<"3、显示停车场状态" << std::endl;std::cout <<"4、退出" << std::endl;std::cout <<"请选择操作:";std::cin >> choice;switch (choice) {case 1: {int carNumber;std::cout <<"请输入车辆号码:";std::cin >> carNumber;Car car ={carNumber, time(NULL),-1};if (!parkingLotisFull()){parkingLotpush(car);std::cout <<"车辆"<< carNumber <<"进入停车场" <<std::endl;} else {waitingQueueenqueue(car);std::cout <<"停车场已满,车辆"<< carNumber <<"在便道等待" << std::endl;}break;}case 2: {int carNumber;std::cout <<"请输入要离开的车辆号码:";std::cin >> carNumber;Car car;bool found = false;for (int i = parkingLottop; i >= 0; i) {if (parkingLotstackArrayicarNumber == carNumber) {car = parkingLotpop();cardepartureTime = time(NULL);found = true;break;}}if (found) {int parkingTime = difftime(cardepartureTime, cararrivalTime);double parkingFee = parkingTime 2; //假设每单位时间停车费为2 元std::cout <<"车辆"<< carNumber <<"离开停车场,停车时间:"<< parkingTime <<"秒,停车费用:"<<parkingFee <<"元" << std::endl;if (!waitingQueueisEmpty()){Car waitingCar = waitingQueuedequeue();parkingLotpush(waitingCar);std::cout <<"便道上的车辆"<< waitingCarcarNumber <<"进入停车场" << std::endl;}} else {std::cout <<"未找到要离开的车辆" << std::endl;}break;}case 3: {std::cout <<"停车场内车辆:"<< std::endl;for (int i = parkingLottop; i >= 0; i) {std::cout << parkingLotstackArrayicarNumber <<"";}std::cout << std::endl;std::cout <<"便道上等待的车辆:"<< std::endl;if (!waitingQueueisEmpty()){for (int i = waitingQueuefront; i!= waitingQueuerear; i =(i + 1) %waitingQueuecapacity) {std::cout << waitingQueuequeueArrayicarNumber <<"";}std::cout << waitingQueuequeueArraywaitingQueuerearcarNumber<< std::endl;} else {std::cout <<"无" << std::endl;}break;}case 4:return 0;default:std::cout <<"无效的选择,请重新输入" << std::endl;}}return 0;}```六、实验结果1、车辆正常进入停车场,并在停车场已满时在便道等待。
数据结构上机--停车场管理问题
实习指导[实习题目]:停车场管理。
[实习内容]:首先,实现栈和队列的基本操作,在此基础上,实现停车场管理。
停车场管理问题描述:设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。
在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端).若车场内已停满n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。
当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门后,其它车辆再按原次序返回车场。
每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费)。
试编写程序,模拟上述管理过程。
要求以顺序栈模拟停车场,以链队列模拟便道。
从终端读入汽车到达或离去的数据,每组数据包括三项:①是“到达”还是“离去";②汽车牌照号码;③“到达”或“离去"的时刻。
与每组输入信息相应的输出信息为:如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用。
(提示:需另设一个栈,临时停放为让路而从车场退出的车.)[实习目的]:通过实习,熟悉栈和队列的基本特点,掌握利用栈和队列解决具体问题的方法。
[实习步骤]:1.实现顺序栈的基本操作●基本思路首先实现一个整型顺序栈的初始化、判栈空、进栈、出栈等基本操作,并在主程序中调用这些操作。
●基本框架#include 〈stdio.h>#define TRUE 1#define FALSE 0#define Stack_Size 50typedef int StackElementType;typedef struct{StackElementType elem[Stack_Size];int top;}SeqStack;/* 以下是函数原形说明。
注意函数头后面有分号。
*/void InitStack(SeqStack *s);intIsEmpty(SeqStack *s);int Push(SeqStack *s,StackElementType e);int Pop(SeqStack *s,StackElementType *e);/*以下是函数定义.注意函数头后面无分号。
数据结构实验(停车场问题)
《数据结构》课程实验实验报告题目:停车场管理专业:计算机科学与几技术班级:姓名:学号:完成日期:一、试验内容设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已经停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出场为它让路,待该辆车开出大门外,其他车辆再按次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用,试为停车场编制按上述要求进行管理的模拟程序。
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。
对一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
二、试验目的(1)深入了解栈和队列的特性,掌握栈和队列的存储方法。
(2)掌握栈和队列的基本操作,如初始化、入栈(队列)、出栈(队列)等,并能在实际问题背景下灵活运用。
三、流程图四、源程序代码#include<stdio.h> #include<stdafx.h> void main(){struct cc1{int hm1,sk1;}a[5];//停车场struct bd{int hm2,sk2;}b[5];//便道struct cc2{int hm3,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");}}}五、调试过程调试过程中,车离开的那一部分经常出现错误,运行结果和预想的不太一样,后来发现是停车场的计数器那出现了问题,使离开后再进入停车场的位置发生了错误。
数据结构-停车场管理系统实验报告
数据结构-停车场管理系统实验报告数据结构停车场管理系统实验报告一、实验目的本次实验旨在通过设计和实现一个停车场管理系统,深入理解和应用数据结构的知识,包括栈、队列、链表等,提高编程能力和解决实际问题的能力。
二、实验环境本次实验使用的编程语言为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 <<"停车场内没有车辆。
数据结构报告 停车场问题
⒈问题描述:停车场管理问题[问题描述]设有一个可以停放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.测试与优化对停车场管理算法进行测试,并根据实际情况进行优化。
可以通过增加数据量、调整车辆进出顺序等方式进行测试,并根据测试结果进行优化。
实验结果:经过实验测试,停车场管理系统可以良好地处理车辆的进入和离开,并正确计算可用停车位的数量。
通过合理的停车位选择算法,确保了车辆进出的顺序。
实验总结:通过本次实验,我们学习了如何利用数据结构来实现停车场管理系统。
停车场管理系统是一种常见的实际应用,对于解决停车难问题具有重要意义。
在实验过程中,我们掌握了设计和实现停车场类、车辆类以及停车场管理算法的方法,加深了对数据结构的理解和应用。
在实验过程中,我们还发现停车场管理算法可以通过不同的策略进行优化,如最大化停车利用率、最小化顾客等待时间等。
数据结构停车场管理问题
和法,显示输入有误,要重新输入。通过 while(Enter->top>room)
是中间位置,就要再用一个栈前面临时开出来的车,等要开出的车开出后,再把临时栈的车看 进 车 场 内 , 并 要 调 用 PRINT(p,room); 这个函数计算显示费用。然后还要用 语句判断便道上有没有车,如果有车就要显示进
5
( 3)主要模块算法描述
本程序最主要的算法就是车辆到达登记的和车辆离开的。
1 车辆到达:int Arrival(SeqStackCar *Enter,LinkQueueCar *W) ○
首先定义一个栈和队列的结构体指针为:*p ,
*t 。然后申请一个车辆信息的内存空间,
并把它赋给栈指针。车辆到达时就输入车牌号,并通过 if(Enter->top<MAX) 来判断该车是进车 场内还是进便道上,如果是进车场内就把 top 加 1,显示在车场内的位置,还要输入进车场的 时间,然后把该节点进栈。如果是 else 就显示该车要停在便道上,并进行进队列的操作。
// 便道上的车用链表表示
2. 算法的设计思想及流程图 ( 1)主要函数的功能说明
1、void InitStack(SeqStackCar *); 当栈未满时,就把到达的车辆进栈。 2、int InitQueue(LinkQueueCar *); 当栈满了时,车辆就进入便道上的队列中 3、int Arrival(SeqStackCar *,LinkQueueCar *); //车辆到达登记 //车辆节点进队列 //车辆节点进栈
进入主菜单
车到达
车离开
列表显示
退出
是
车场是否为空 否
车场内信息
便道车信息
退出列表 显示 Room 前 车 辆进临时栈
数据结构 停车场管理报告
实验二:停车场管理(栈和队列应用)班级学号姓名一、实验目的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.车辆目前情况,用户通过键盘输入,以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。
对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间(离开时间减去停在停车场的时间)和应交纳的费用(在便道上停留的时间不收费)。
2.依次输入一系列数据项(3个数据:第一个字符数据A或D表示车辆的到达或离开,第二整形数据表示车辆的车牌号码,第三个整形数据表示汽车到达或离去的时间),要求同一辆汽车到达的时间比离开的时间早。
3.测试数据设停车场能容纳3辆车。
请输入车辆目前情况:A ,1,51车辆停入停车场1号。
请输入车辆目前情况:A ,2,61车辆停入停车场1号2车辆停入停车场2号。
请输入车辆目前情况:A ,3,5输入时间错误哦!请输入车辆目前情况:A ,3,61车辆停入停车场1号2车辆停入停车场2号。
3车辆停入停车场3号。
请输入车辆目前情况:A ,4,61车辆停入停车场1号。
2车辆停入停车场2号。
3车辆停入停车场3号。
4车辆在便道1号。
停车场已满。
4车辆已放在便道。
请输入车辆目前情况:D ,1,71车辆已离开。
时间5,收费10块。
2车辆停入停车场1号。
3车辆停入停车场2号。
4车辆停入停车场3号。
请输入车辆目前情况:E ,0,0程序结束,感谢使用本程序哦。
本程序其他错误处理,没有设置处理。
二、概要设计抽象数据类型基本操作对象是汽车类,包含来去信息,车牌号以及到达时间;Class Car//车辆信息{Public:int Lincese ;//车牌号int ArriveTime ;//到达时间};便道先进先出的特性用队列是十分好的,但停车场有一个要求就是先进的要出去时,所有车辆都要让路,所以停车场用栈来模拟,便道使用队列来模拟; ADT StopStack数据对象:D={i a |i a ∈class car};数据关系:R1={ <ai-1, ai >| ai-1, ai ∈D, i=2,...,n }约定an 端为栈顶,a1 端为栈底。
数据结构停车场管理问题
数据结构停车场管理问题在现代社会,停车场的管理是一个常见但又复杂的问题。
无论是商场、办公楼、住宅小区还是机场等场所,都需要一个高效且合理的停车场管理系统来满足车辆的停放需求,并确保停车场的有序运行。
停车场管理涉及到多个方面,首先是车辆的进入和驶出登记。
当车辆进入停车场时,系统需要记录车辆的相关信息,如车牌号、进入时间等。
这就需要一个有效的数据存储结构来快速准确地记录这些信息。
在数据结构的选择上,常见的有链表、数组、栈和队列等。
对于车辆信息的存储,链表是一个不错的选择。
链表的特点是插入和删除操作比较方便,当有新车辆进入或车辆驶出时,可以快速地进行信息的更新。
假设我们使用链表来存储车辆信息,每个节点代表一辆车的信息。
节点中包含车牌号、进入时间、预计停留时间等字段。
当车辆进入时,创建一个新的节点并插入到链表中。
车辆驶出时,通过车牌号在链表中查找对应的节点,然后删除该节点,并计算停车费用。
除了车辆信息的存储,停车场的车位管理也是一个关键问题。
我们需要知道哪些车位是空的,哪些车位被占用。
这可以通过一个二维数组或者位图来表示。
以二维数组为例,假设停车场有 M 行 N 列的车位。
那么可以创建一个 M×N 的二维数组,数组中的每个元素表示一个车位的状态,0 表示空闲,1 表示已占用。
当车辆进入时,找到一个空闲的车位,并将对应的数组元素标记为 1。
车辆驶出时,将相应的元素标记为 0。
然而,在实际的停车场管理中,可能会有不同类型的车位,比如普通车位、残疾人车位、VIP 车位等。
为了更好地管理这些不同类型的车位,可以使用结构体或者类来表示车位的信息。
结构体中可以包含车位的类型、位置、状态等属性。
另外,停车场的收费管理也是一个重要的部分。
收费方式可能多种多样,比如按时间收费、按次收费、包月收费等。
这就需要根据不同的收费方式设计相应的数据结构和算法来计算费用。
对于按时间收费,可以记录车辆的进入时间和驶出时间,然后根据时间差和收费标准来计算费用。
数据结构课程设计停车场管理系统
试验二停车场管理班级: A0712学号: 12 姓名: 冷清淼成绩: __________指导教师签名: __________一、问题描述设停车场是一种可停放n辆车旳狭长通道, 且只有一种大门可供汽车进出。
在停车场内, 汽车按抵达旳先后次序, 由北向南依次排列(假设大门在最南端)。
若停车场内已停满n辆车, 则后来旳汽车需在门外旳便道上等待, 当有车开走时, 便道上旳第一辆车即可开入。
当停车场内某辆车要离开时, 在它之后进入旳车辆必须先退出停车场为它让路, 待该辆车开出大门后, 其他车辆再按原次序返回车场。
每辆车离开停车场时, 应按其停留时间旳长短交费(在便道上停留旳时间不收费)。
设计规定:1. 模拟上述管理过程。
规定以次序栈模拟停车场, 以链队列模拟便道。
2.从终端读入汽车抵达或拜别旳数据, 每组数据包括三项:(1)是“抵达”还是“离开”;(2)汽车牌照号码;(3)“抵达”或“离开”旳时刻。
3. 与每组输入信息对应旳输出信息为: 假如是抵达旳车辆, 则输出其在停车场中或便道上旳位置;假如是拜别旳车辆, 则输出其在停车场中停留旳时间和应交旳费用。
二、算法阐明1. 数据构造阐明(1)用到两个堆栈: 一种为车场栈;另一种为临时栈temptypedef struct NODE{CarNode *stack[MAX+1];int top;}SeqStackCar; /*模拟车场*/一种队列构造, 存储便道车辆信息:typedef struct Node{QueueNode *head;QueueNode *rear;}LinkQueueCar; /*模拟便道*/2. 算法阐明(1) 功能模块阐明:停车场管理系统具有三个模块, 即:车辆抵达、离开、列表显示图1(2)以模块为单位分析算法1.“抵达”模块: 抵达时有两种状况, 即车场与否满, 未满则直接进入停车场;满时, 到便道等待。
如图2。
图22.“离开”模块:离开时, 当车库为空时, 提醒没有车, 结束;否则车辆离开。
数据结构尝试停车场问题
(1)深入了解栈和队列的特性,掌握栈和队列的存储方法。 (2)掌握栈和队列的基本操作,如初始化、入栈(队列)、出栈(队列)等,并能 在实际问题背景下灵活运用。
三、流程图
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,通系电1,力过根保管据护线生高0不产中仅工资2艺料22高试2可中卷以资配解料置决试技吊卷术顶要是层求指配,机置对组不电在规气进范设行高备继中进电资行保料空护试载高卷与中问带资题负料2荷试2,下卷而高总且中体可资配保料置障试时2卷,32调需3各控要类试在管验最路;大习对限题设度到备内位进来。行确在调保管整机路使组敷其高设在中过正资程常料1工试中况卷,下安要与全加过,强度并看工且25作尽52下可22都能护可地1关以缩于正小管常故路工障高作高中;中资对资料于料试继试卷电卷连保破接护坏管进范口行围处整,理核或高对者中定对资值某料,些试审异卷核常弯与高扁校中度对资固图料定纸试盒,卷位编工置写况.复进保杂行护设自层备动防与处腐装理跨置,接高尤地中其线资要弯料避曲试免半卷错径调误标试高方中等案资,,料要编试求5写、卷技重电保术要气护交设设装底备备置。4高调、动管中试电作线资高气,敷料中课并设3试资件且、技卷料中拒管术试试调绝路中验卷试动敷包方技作设含案术,技线以来术槽及避、系免管统不架启必等动要多方高项案中方;资式对料,整试为套卷解启突决动然高过停中程机语中。文高因电中此气资,课料电件试力中卷高管电中壁气资薄设料、备试接进卷口行保不调护严试装等工置问作调题并试,且技合进术理行,利过要用关求管运电线行力敷高保设中护技资装术料置。试做线卷到缆技准敷术确设指灵原导活则。。:对对在于于分调差线试动盒过保处程护,中装当高置不中高同资中电料资压试料回卷试路技卷交术调叉问试时题技,,术应作是采为指用调发金试电属人机隔员一板,变进需压行要器隔在组开事在处前发理掌生;握内同图部一纸故线资障槽料时内、,设需强备要电制进回造行路厂外须家部同出电时具源切高高断中中习资资题料料电试试源卷卷,试切线验除缆报从敷告而设与采完相用毕关高,技中要术资进资料行料试检,卷查并主和且要检了保测解护处现装理场置。设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
数据结构上机--停车场管理问题
实习指导[实习题目]:停车场管理。
[实习内容]:首先,实现栈和队列的基本操作,在此基础上,实现停车场管理。
停车场管理问题描述:设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。
在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。
若车场内已停满n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。
当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门后,其它车辆再按原次序返回车场。
每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费)。
试编写程序,模拟上述管理过程。
要求以顺序栈模拟停车场,以链队列模拟便道。
从终端读入汽车到达或离去的数据,每组数据包括三项:①是“到达”还是“离去”;②汽车牌照号码;③“到达”或“离去”的时刻。
与每组输入信息相应的输出信息为:如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用。
(提示:需另设一个栈,临时停放为让路而从车场退出的车。
)[实习目的]:通过实习,熟悉栈和队列的基本特点,掌握利用栈和队列解决具体问题的方法。
[实习步骤]:1.实现顺序栈的基本操作●基本思路首先实现一个整型顺序栈的初始化、判栈空、进栈、出栈等基本操作,并在主程序中调用这些操作。
●基本框架#include <stdio.h>#define TRUE 1#define FALSE 0#define Stack_Size 50typedef int StackElementType;typedef struct{StackElementType elem[Stack_Size];int top;} SeqStack;/* 以下是函数原形说明。
注意函数头后面有分号。
*/void InitStack(SeqStack *s);int IsEmpty(SeqStack *s);int Push(SeqStack *s, StackElementType e);int Pop(SeqStack *s, StackElementType *e);/* 以下是函数定义。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
HUNAN UNIVERSITY 课程实习报告题目:停车场管理问题学生姓名学生学号专业班级指导老师李晓鸿完成日期2015年 11月 25日一、需求分析1.输入的形式的输入的范围:①.选择功能: 1 停车 2 离开停车场 3 离开过道②.若输入1(停车),输入当前车牌号和当前的时间;若输入 2(离开停车场),输入车票号和当前时间;若输入 3(离开过道),输入车牌号。
2.输出的形式:①.提示选择功能“ 1. 停车 2 离开停车场 3 离开过道”。
②.若输入1(停车),并且输入当前车牌号和当前的时间后,停入停车场,停车场内有n 辆车,过道上有m辆车等候”车场已满,请在过道等候”。
若停车场未满,输出“成功; 若停车场满,输出“停若输入 2(离开停车场),输入车票号和当前时间,输出“存车总计时间,收费 q 元,停车场内有 n 辆车,过道上有 m辆车等候”;如果进停车场和出停车场时间错误,输出“时间输入有误,请重新输入”;如果停车场没有此车,输出“车牌号有误,请重新输入”。
若输入 3(离开过道),输入车牌号,输出“此车已成功离开过道”;“停车过道为空”。
若无此车,输出若输入其他,则提示选择功能“ 1. 停车2 离开停车场 3 离开过道”。
3.程序所能达到的功能:有一个可以停放n 辆汽车的狭长停车场,它只有一个大门可以供车辆进出。
车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放( 最先到达的第一辆车放在停车场的最里面 ) 。
如果停车场已放满n 辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。
停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。
每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。
4.测试数据:①正常的进入停车场,出停车场,离开过道的模拟输入 11(车牌)1(当前时间)输入 12(车牌)2(当前时间)输入 22(车牌)3(当前时间)输入 13(车牌)4(当前时间)输入 14(车牌)5(当前时间)输入 34(车牌)②.停车场里没有车出停车场的模拟输入 21(车牌)③.过道没车出过道的模拟输入 31(车牌)④.进入停车场时间与出停车场时间的模拟输入 11(车牌)1(进停车场的时间)输入 21(车牌)0(出停车场的时间)⑤.停车场模拟系统功能输入错误输入 4二 . 概要设计抽象数据类型:①.由于该停车场只有一个门供出入,并且最先进的停在停车场的最末,最先进的车辆要出停车场需要之后进入的车先出,满足先进后出的结构,其限制是仅允许在表的一端进行插入和删除运算,所以用栈来模拟停车场。
②.由于这是一个模拟的车库,车辆出停车场,后面车辆不得不被动跟着出停车场,我们需要对这些车辆进行管理,将第一辆被动出停车场的放置到一个队伍的前端,接下来被动出停车场的车辆依次放到第一辆车之后,当需要离开的车出栈后,对被动出停车场的车辆进行管理,又队伍的前端依次进入停车场,由于满足只允许在表的前端进行删除操作,而在表的后端进行插入操作,所以用队列来模拟被动出停车场车辆的管理。
基本思想1.给定一个 size 为停车场的容量。
2.每一辆车进栈前,储存车辆编号和进栈的时间。
3.对于栈满的情况,再来的车辆不进栈,只记录编号。
4. 对于出栈的车辆,先将出栈车辆之前的停车场内车辆由后往前依次进入队列中,将进栈和出栈时间相比较算出需要付的金额,之后再将队列中的元素由前往后依次进栈。
程序的流程程序由三个模块组成:输入模块:按照提示输入计算模块:计算(出栈时间- 进栈时间) * 每小时金额。
输出模块:首先提示" 请选择: 1、停车; 2、离开停车场; 3、离开过道; "选择提示 " 请输入车牌号和现在的时间:"选择 3 提示“请输入车牌号”基本 ADT①.栈空判别算法int Empty_SeqStack(queue *s){if (s->top == -1)return 0;elsereturn 1;}②.入栈算法void Push_SeqStack(queue *s, Datatype x) {s->top++;s->data1[s->top] = x;return;}③.出栈算法void Pop_SeqStack(queue *s, Datatype *x) {*x = s->data1[s->top];s->top--;return;}④.列队初始化C_SeQueue *Init_SeQueue(){C_SeQueue *q;q = new C_SeQueue;q->front = q->rear = MAXSIZE - 1;q->num = 0;return q;}⑤.入队算法void In_SeQueue(C_SeQueue *q, Datatype x) {q->rear = (q->rear + 1) % MAXSIZE;q->data2[q->rear] = x;q->num++;return;}⑥.出队算法void Out_SeQueue(C_SeQueue *q, Datatype *x) {q->front = (q->front + 1) % MAXSIZE;*x = q->data2[q->front];q->num--;return;}算法流程图(进入车库和出车库)三.详细设计1.数据类型用 Int型整数储存车辆的信息. 车辆进出时间. 收取的费用2.算法的具体步骤①车进入停车场的基本操作void Arrive(queue *s, C_SeQueue *q, int x, double t){int y;int a = s->top;while (a != -1)法的时空分析和改进设想每次进栈的时间复杂度为O( 1),当要出车辆后有n 辆车时,出栈时间复杂度为O( n),也许对于一个车库来说n 并不会很大,但是考虑实际这个停车场的设计非常不合理。
4.输入和输出格式输入:功能选择输入为整数1-3 ,输入车牌号为大于零的整数,时间为大于零的整数。
输出:输出整数型的应收的价格四.调试分析1. 为了简化程序,采用手动输入进栈车辆的排序. 进栈时间 . 出栈时间。
2. 同时因为需要输入多组数据,在程序完工后又加上许多引导性的话,例如提示停车场内有几辆车 . 停车场外有多少车. 车辆是否进入车库成功. 车辆是否在车库外等候。
3.对于时间的处理过于简陋,只用了一位数表示时间,与实际情况不太符合。
4.对于车牌处理也过于简单,可以在车的储存信息加入车牌号。
五.测试结果情况 1 测试结果情况 2测试情况 3测试情况 4测试情况 5测试六.试验心得1.书上对栈的实现太少不详细,查阅了许多栈的各类实现怎么写。
2. 存车取车问题比较简单,在程序完成后发现程序的容错率为 0,当不小心输入了相同车牌时程序直接报错,不得不添加了许多容错代码,容错程序代码很是让人费神,现在容错已完善再完善了,但还是未能完全解决问题,例如,在过道停的车辆不能保证其中没有相同车牌号的车,还有时间处理的比较简单原始化,这些都有待以后提高,继续完善。
3. 这道题过于死板,完全是为了栈强行设计了一道门的停车场,每次有车出来后面的车都要移动位置,这种车库,不停也罢。
七.代码#include <iostream>using namespace std;#define MAXSIZE10#define MINSIZE 2typedef int Datatype ;typedef struct {Datatype data1[ MINSIZE];int top;double time[MINSIZE];} queue;queue *Init_SeqStack()// 栈的初始化;{queue *s;s =new queue;if (!s){cout << " 空间不足 " << endl;return NULL;}else {s->top = -1;return s;}}int Empty_SeqStack( queue * s)// 栈空判别算法;{if ( s->top == -1)return 0;elsereturn 1;}void Push_SeqStack( queue * s, Datatype x )// 入栈算法;{s->top++;s->data1[ s->top] =x;return ;}int Push_SeqStack1( queue * s, Datatype x , double t ) // 入栈算法1;{if ( s->top ==MINSIZE - 1)return 0;else {s->top++;s->data1[ s->top] = x;s->time[ s->top] = t ;return 1;}}void Pop_SeqStack( queue * s, Datatype * x )// 出栈算法;{*x = s->data1[ s->top];s->top--;return ;}typedef struct{Datatype data2[ MAXSIZE];int rear, front;int num;} C_SeQueue;C_SeQueue*Init_SeQueue()// 列队初始化;{C_SeQueue*q;q =new C_SeQueue;q->front = q->rear =MAXSIZE- 1;q->num = 0;return q;}void In_SeQueue( C_SeQueue* q, Datatype x) // 入队算法;{MAXSIZE;q->rear = (q->rear + 1) %q->data2[ q->rear] =x;q->num++;return ;}voidOut_SeQueue( C_SeQueue* q, Datatype * x) // 出队算法;{MAXSIZE;q->front = (q->front + 1) %*x = q->data2[ q->front];q->num--;return ;}void show( queue * s, C_SeQueue* q) // 显示停车情况;{cout << " 停车场内有 " << s->top + 1 << " 辆车。