数据结构课程设计停车场管理系统
- 格式:doc
- 大小:436.05 KB
- 文档页数:78
数据结构停车场课程设计一、课程目标知识目标:1. 理解数据结构中图和树的概念,掌握它们在解决实际问题中的应用。
2. 学习并掌握停车场系统的逻辑结构,能运用所学数据结构设计停车场的模拟系统。
3. 了解不同数据结构在处理停车场问题时的效率差异,能够分析其时间复杂度和空间复杂度。
技能目标:4. 能够运用所学知识,设计并实现一个简单停车场的管理系统,包括车辆入场、出场、查找空车位等基本功能。
5. 通过课程设计活动,提升学生利用数据结构解决实际问题的编程能力,加强代码的逻辑性和可读性。
6. 培养学生将理论知识应用于实际问题的能力,通过团队协作完成课程设计任务。
情感态度价值观目标:7. 激发学生对计算机科学和数据结构的兴趣,增强其对复杂问题探究的积极态度。
8. 培养学生的团队协作精神,学会在团队中分工合作、共同解决问题。
9. 增强学生的创新意识,鼓励学生大胆尝试不同的解决方案,体会科技创新对现实生活的影响。
课程性质分析:本课程设计属于高中信息技术或计算机科学课程,以实践性和应用性为主,旨在通过实际问题的解决,加深学生对数据结构知识的理解和运用。
学生特点分析:高中生具有一定的数据结构基础和编程能力,思维活跃,对实际问题具有较强的探究欲望,但需要进一步引导他们将理论知识与实际问题相结合。
教学要求:教师应引导学生将所学知识综合运用到停车场系统设计中,注重理论与实践相结合,鼓励学生创新思维和团队合作,通过具体的学习成果来衡量学生掌握情况。
二、教学内容1. 数据结构基本概念复习:回顾图和树的基本概念,包括相关术语、性质及常用算法。
教材章节:第五章“图”,第六章“树”2. 停车场系统需求分析:介绍停车场系统的基本功能,如车辆入场、出场、查找空车位等。
教材章节:项目实战部分3. 数据结构选择与应用:探讨不同数据结构在停车场系统中的应用,如邻接表、邻接矩阵、二叉树等。
教材章节:第五章、第六章应用实例4. 停车场系统设计:详细讲解如何利用数据结构设计停车场系统,包括数据模型、算法实现等。
数据结构课程设计——停车场在当今社会,随着汽车数量的不断增加,停车场的管理变得日益重要。
一个高效、合理的停车场管理系统不仅能够提高停车场的使用效率,还能为车主提供更好的服务体验。
在本次数据结构课程设计中,我们将深入探讨如何设计一个实用的停车场管理系统。
一、需求分析首先,我们需要明确停车场管理系统的基本需求。
一般来说,它应该具备以下功能:1、车辆的入场登记,包括车辆的车牌号、入场时间等信息。
2、车辆的出场结算,根据停车时间计算停车费用。
3、实时显示停车场内的车位使用情况,以便车主了解是否有空闲车位。
4、能够支持不同类型的车辆,如小型车、中型车、大型车等,并根据车辆类型收取不同的费用。
二、数据结构选择为了实现上述功能,我们需要选择合适的数据结构来存储和管理停车场的相关信息。
1、对于车辆信息的存储,我们可以使用链表。
链表的优点是插入和删除操作比较方便,可以快速地对车辆的入场和出场进行处理。
2、对于车位的管理,我们可以使用栈或者队列。
如果采用栈的方式,先进后出,适合模拟停车场的一端进出;如果采用队列的方式,先进先出,更符合一些实际场景中车辆按顺序入场和出场的情况。
3、为了快速查找车辆的信息,我们还可以使用哈希表,通过车牌号作为键,快速获取车辆的相关数据。
三、系统设计1、入场流程当车辆入场时,系统会获取车辆的车牌号、车型和入场时间等信息。
将这些信息存储到链表中,并在车位管理的数据结构(如栈或队列)中为车辆分配一个车位。
同时,更新停车场内的车位使用情况。
2、出场流程车辆出场时,根据车牌号在链表中查找车辆的入场时间等信息,计算停车时间和费用。
然后在车位管理的数据结构中释放车位,并更新车位使用情况。
3、车位显示实时统计车位管理数据结构中的空闲车位数量,并展示给车主,让他们能够提前了解停车场的空位情况。
4、费用计算根据车辆的车型和停车时间,按照预设的收费标准计算停车费用。
四、算法实现1、车辆入场算法```cvoid vehicleEntry(char plateNumber, int vehicleType) {Vehicle newVehicle =(Vehicle )malloc(sizeof(Vehicle));strcpy(newVehicle>plateNumber, plateNumber);newVehicle>vehicleType = vehicleType;newVehicle>entryTime = time(NULL);//将车辆信息插入链表insertVehicle(newVehicle);//为车辆分配车位allocateParkingSpace(newVehicle);updateParkingStatus();}```2、车辆出场算法void vehicleExit(char plateNumber) {Vehicle vehicle = searchVehicle(plateNumber);if (vehicle == NULL) {printf("未找到该车辆信息\n");return;}double parkingFee = calculateFee(vehicle);//释放车位releaseParkingSpace(vehicle);//从链表中删除车辆信息deleteVehicle(vehicle);updateParkingStatus();printf("车牌号:%s,停车费用:%2f 元\n", plateNumber, parkingFee);}```3、车位分配算法(以栈为例)void allocateParkingSpace(Vehicle vehicle) {if (top < MAX_PARKING_SPACES 1) {parkingSpaces++top = vehicle;vehicle>parkingSpaceNumber = top + 1;} else {printf("停车场已满\n");}}```4、车位释放算法```cvoid releaseParkingSpace(Vehicle vehicle) {if (top >= 0 && parkingSpacestop == vehicle) {parkingSpacestop = NULL;top;} else {printf("车位释放错误\n");}}```五、系统测试在完成系统的开发后,我们需要进行充分的测试以确保系统的稳定性和正确性。
数据结构停车场管理系统数据结构设计在智能化时代的今天,停车问题成为了城市管理的一大难题。
为了解决车辆日益增多的停车需求,设计一个高效的停车场管理系统显得尤为重要。
本文将围绕数据结构的设计来探讨停车场管理系统的实现。
一、需求分析停车场管理系统的主要功能是提供用户停车、缴费、查询等服务,同时需要为管理人员提供车辆调度、收费统计等功能。
为了实现这些功能,我们需要从需求角度对数据结构进行设计。
1. 用户管理停车场管理系统需要记录每个用户的停车信息,包括车辆信息、停车时间等。
为了高效查询用户信息,可以使用哈希表作为数据结构,将用户的身份证号或车牌号作为键值,用户信息作为值进行存储。
2. 车辆管理为了维护停车场内的车辆信息,我们可以使用链表作为数据结构来管理车辆。
每个节点可以保存一个车辆的信息,如车牌号、停车时间等,同时连接下一个车辆节点。
3. 车位管理停车场需要管理可用车位和已停车位。
为了高效分配车位,可以使用堆作为数据结构来存储可用车位信息。
堆可以根据剩余车位数量进行自动排序,当有车辆进入停车场时,从堆中取出最小的剩余车位。
4. 收费管理停车场管理系统需要计算用户停车时间并进行费用结算。
为了高效计算停车时间,可以使用栈作为数据结构来记录每个用户进入停车场的时间。
栈可以实现先进后出的特点,正好符合车辆停车的实际情况。
当用户离开停车场时,可以根据进入时间计算停车时间并进行费用结算。
5. 查询与统计为了用户能够方便地查询自己的停车信息,可以使用二叉查找树作为数据结构,将用户的车牌号作为键值进行存储。
二叉查找树可以在O(log n)的时间复杂度内完成查询操作。
另外,为了方便管理人员进行统计工作,可以使用散列表来存储车辆的停车信息,以便根据不同条件进行统计分析。
二、系统设计基于以上需求分析,我们可以得出停车场管理系统的数据结构设计如下:1. 用户管理使用哈希表来存储用户信息,将用户的身份证号或车牌号作为键值,用户信息作为值进行存储。
#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 100/*预设停车场有100个车位*/#define D 1.2/*预设车辆停车费为1.2元每小时*/ #define NUMBER 100void menu();void start();void parkingplace();void drive();struc car{int carnumber;int cararrave;int carleave;int carplace;}car[NUMBER];struct park;{int null;}parkingplace[N-1];void main (){menu();/*菜单*/}void menu(){int n;do{puts("****MENU***");puts("1、停车");puts("2、开车");puts("3、退出");puts("4、初始化");printf("请选择你需要的服务(1-4):");scanf("%d",&n);}switch(n){case 1:parking;break;/*停车函数*/case 2:drive;brea ;/*开车函数*/case 3:exit;break;/*退出*/case 4:start;break;/*初始化*/}}void start()/*初始化*/{int i,j;for(i=0;j<N;i++)parking[i].null=0;/*停车场设置为空*/printf("已初始化");menu();}void parkingplace()/*车辆进入函数*/{int i,a,h=0;printf(“请输入该车系序号(从0开始):”);scanf(“%d”,&a);for(i=0;i<N;i++){if(parking[i].park==0)/*无车标记*/if(parking[i].park==1)/*有车标记*/h=h+1;}if(h==N)printf(“停车场内已满!”);else{car[a].carplace=h;parkingplace[h].null=1;printf(“该车应该停在停车场内”);printf(“请输入该车进停车场时间:”);scanf(“d%”,&car[a].cararrave);}void drive()/*车辆离开函数*/{int i,k,time;double(“请输入车辆次序号【】”);scanf(“%d”,&i);printf(“请输入离开时间:”);scanf(“%d”,&car[i]carleave);fee=D*(car[i].carleave-car[i].cardrrave);time=car[i].carleave-car[i].cardrrave;printf(“次序号为%d的车停时间%d小时,应收费%f元”,i,time,fee); }。
~《数据结构》一.课程设计题目某停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆汽车停放在最北端),若停车场内已经停满n 辆车,则后来的汽车只能在门外的便道即候车场上等候,一旦有车开走,则排在便道上的第一辆车即可开入。
当停车场内某辆车要离开时。
在它之后进入的车辆必须先退出车场为它让路,该车辆开出大门外,其它车辆再按原次序进入停车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
试为该停车场编制按上述要求进行管理的模拟程序。
二.流程及图示停车场(栈1)栈2三、程序运行及截图1.开始界面首先是登陆界面,只要用户名跟密码一样就可以登陆,输入正确后,有一个延迟程序,让使用者感觉更真实如果输入错误了,就是直接退出了2.主界面登录成功后,则是如下的功能界面:3 . 停车场管理系统你可以选择停车,离开,或者查看,当操作完了,可以直接选择退出。
当你输入1 后,会提示你输入停车的车号:在这里输入你想要停车的车号,然后会提示你停车的时间:输入停车时间后,则会显示你刚停车的详细的信息:4.离开输入 2,则会提示你要离开的车号:然后输入离开的车号后,会提示你输入该车离开的时间,输入离开的时间,则会出现如下界面:5 停车场管理系统系统则会把你刚离开的车俩的详细信息给你打印出来:拉开的车号,所用时间以及应收的费用。
这个时间管理员,可以对照表收费了。
6.查看当你要查看停车场所停车的信息时,你可以选择 3。
同样,选择 3 确定后会提示你要查看的车号,然后则会把信息打印在界面上:系统会告诉你这俩停在停车场里面的那个位置上。
7.退出当你一切操作完了后,就可以选择退出了,输入 4 停车场管理系统随便按个键就退出该系统了。
四、程序代码#include<iostream>#include<conio.h>#include<iomanip>#include<fstream>#include<string>#include <stdlib.h>#include <windows.h>using namespace std。
《数据结构》课程设计报告设计报告题目:停车场管理问题学院:信息科学与工程学院《数据结构》课程设计报告书1.1 课程设计选题的目的为大家解决一些生活中的实际问题,在这个过程中,自我设计的能力也在不断地提高。
此次程序设计综合运用所学数据额结构以及C语言的知识解决实际问题,将课堂的书本知识有效的在程序中体现出来,使我们更理解了C语言及数据结构的功能之强大,进一步让学生对面向对象的方法以及数据结构的编程思想有了较好了解和认识。
1.通过课程设计,加深对《数据结构》这一课程所学内容的进一步理解与巩固。
2.通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计出合理的模块化结构。
3.通过课程设计,提高程序开发功能,培养分析问题、解决实际问题的能力,能运用合理的控制流程编写清晰高效的程序。
1.2 课程设计选题的内容[问题描述]设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。
车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。
如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。
停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。
每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。
编制一程序模拟该停车场的管理。
[实现要求]要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。
一.需求分析以栈模拟停车场,以队列模拟停车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包含三个数据项:汽车“到达”或“离去”信息,汽车牌照号码以及汽车到达或离去的时刻。
数据结构课程设计停车场管理系统停车场管理系统设计文档1.引言1.1.目的本文档旨在详细描述停车场管理系统的设计和功能要求。
1.2.范围本文档适用于数据结构课程设计的停车场管理系统。
1.3.定义、缩写和缩写词①.数据结构:一组数据元素和一组操作这些数据元素的关系的数学模型。
②.停车场:用于停放汽车的专用场所。
③.系统:由一组相互关联的元素组成,以实现特定目标。
④.管理:处理和控制组织中的资源和相关活动以达到特定的目标。
⑤.法律名词及注释详见附件1.2.概述2.1.系统功能停车场管理系统旨在实现以下功能:●记录车辆进入和离开停车场的时间和位置●管理停车位的分配和释放●提供停车费计算功能●提供查询和统计功能2.2.用户类别停车场管理系统将提供以下用户类别的功能:●系统管理员:负责管理系统的整体运行和设置参数●停车场经理:负责监督停车场日常运作●停车员:负责接收车辆、记录进出时间、收取停车费等操作●车主:可以查询自己车辆的停车情况和费用信息2.3.系统约束停车场管理系统将在以下约束条件下进行设计和开发:●系统将使用C++编程语言实现●系统将采用面向对象的设计方法●系统将在Windows操作系统上运行3.系统设计3.1.系统架构停车场管理系统将采用分层架构,包括以下几个层次:●用户界面层:提供用户与系统交互的界面●业务逻辑层:处理用户请求和管理数据库●数据访问层:与数据库进行交互3.2.数据结构停车场管理系统将使用以下数据结构:●队列:用于记录车辆进入停车场的顺序●栈:用于记录车辆离开停车场的顺序●数组:用于存储停车位的状态信息3.3.算法停车场管理系统将使用以下算法:●车辆进入停车场:将车辆信息加入队列,并更新停车位状态●车辆离开停车场:从队列中删除车辆信息,并更新停车位状态和计算停车费用●查询停车位状态:遍历数组,输出停车位的状态信息●统计停车场使用情况:遍历数组,统计停车位的占用情况4.接口设计4.1.用户界面停车场管理系统将提供以下用户界面:●系统管理员界面:用于设置系统参数和管理用户信息●停车场经理界面:用于进行停车场状态监视和管理●停车员界面:用于处理车辆进入和离开的操作●车主界面:用于查询停车信息和费用5.数据库设计5.1.数据库结构停车场管理系统将包含以下数据库表:●用户表:用于存储用户信息,包括用户名、密码、角色等●车辆表:用于存储车辆信息,包括车牌号、车主姓名等●记录表:用于存储车辆进出停车场的记录,包括车牌号、进出时间、停车位号等5.2.数据库操作停车场管理系统将提供以下数据库操作:●用户登录和注册●车辆信息增删改查●记录查询和统计6.系统测试6.1.单元测试对停车场管理系统的每个模块进行独立测试,确保其功能正常。
课题分析 (2)二逻辑分析 (2)2.1数据结构的描述和每个基本操作的功能说明 (2)2.1给出本程序包含的模块及模块之间的调用关系图 (3)2.3写出重要部分的伪码算法 (3)三详细设计3.1数据结构的定义,及其基本操作的实现 (4)3.2主函数和其他函数的实现或伪码算法 (5)3.3程序的层次结构的函数调用关系图 (7)3.4详细设计 (7)四程序源代码 (8)五程序调试与测试 (16)5.1主界面 (16)5.2具体操作 (17)5.2.1进站时间与车牌号 (17)5.2.2车站已满,请进入临时车道 (18)5.2.3 出站与收费 (19)5.2.4 结束 (19)5.3相关操作 (19)六程序中遇到的问题与解决方法 (20)6.1写提纲 (20)6.2在程序调试过程,遇到的相关问题 (20)七总结 (24)八参考文献25课题分析a)该程序主要利用栈和队列来实现车的到达及其离开功能,其中主要有对各种情况的处理,要求如下:1 、要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的数据序列进行模拟管理2 、要求处理的数据元素包括三个数据项:汽车“到达”或“离去”信息,汽车牌照及到达或离去的时间3、该系统完成以下功能:若是车辆到达,则输出汽车在停车场或便道上的停车位置;若是离去,则输出汽车在停车场停留的时间和应缴纳的费用(在便道上停留的时间不收费)4 、要求栈以顺序结构实现;b)程序的输入,程序功能选择,字符型,A为到达,D离开,E退出系统;车的编号是整型,输入数字即可;时间是float类型,可精确到分钟c)程序的输出,当车到达,程序输出车的编号及到达时间,若栈满则提示停到便道上;车离开时,输出车的编号及其所需费用。
d)测试数据,(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 以及a)中的要求。
数据结构-停车场管理系统实验报告数据结构停车场管理系统实验报告一、实验目的本次实验旨在通过设计和实现一个停车场管理系统,深入理解和应用数据结构的知识,包括栈、队列、链表等,提高编程能力和解决实际问题的能力。
二、实验环境本次实验使用的编程语言为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 <<"停车场内没有车辆。
学号 **********数据结构课程设计设计说明书停车场管理系统起止日期:年月至年月日学生姓名班级成绩指导教师(签字>年月日停车场管理系统一、引言3二、系统总体设计31、设计思路32、系统总体框架图53、系统流程图5三、详细设计71、车辆停车函数及流程图72、车辆离开函数及流程图83、列表显示车场信息函数及流程图94、列表显示便道信息105列表显示菜单函数及流程图11四、总结12参考文献12五、附录13一、引言随着现代化信息技术的发展,人民生活水平快速提高,汽车的数量也飞速增长,于此同时,停车问题越来越受人们的关注,为了使停车场有效管理,停车场管理的信息化成为必然。
我们可以利用所学的知识,编写一个停车场管理系统,以提高管理的效率,提升停车场的竞争力。
本次课程设计,我运用C语言编写停车场管理系统,主要实现汽车停车,离开,收费,停车信息查询,显示等功能,主要实现方式是用栈和队列。
下面对栈和队列进行一下简单介绍。
栈<stack)是一种仅允许在一端进行插入和删除运算的线性表。
栈中允许插入和删除的那一端,称为栈顶<top)。
栈顶的第一个元素称为栈顶元素。
栈中不可以插入和删除的那一端称为栈底。
在一个栈中插入元素,即把新元素放到当前栈顶元素的上面,使其称为新的栈顶元素,即进栈<push)。
从一个栈中删除一个元素,即把栈顶元素删除掉,使其下面的元素成为新的栈顶元素,称为出栈<pop)。
栈遵循后进先出的原则,即后进栈的元素必先出栈。
其中顺序栈是利用一组地址连续的存储单元依次存放从栈底到栈顶的元素。
在C语言中,可以用一维数组描述顺序栈中数据元素的存储区域,并预设一个数组的最大空间。
栈底设置在0下标端,栈顶随着插入和删除元素而变化,可以用一个整形变量top来指示栈顶的位置。
队列是一种限定在表的一端进行插人而另一端进行删除的线性表,与栈相反,队列遵循先进先出的原则。
允许删除的一端,称为队头<front)。
一、课程设计目标 (1)1 问题描述 (1)2 问题分析 (1)二、概要设计 (1)1 抽象数据类型定义 (1)2 模块划分 (4)三、详细设计 (6)1 数据类型的定义 (6)2 主要模块的算法描述 (8)四、测试分析 (14)1 主界面 (14)2 具体操作 (15)五、课程设计总结 (17)六、源程序清单 (18)*参考文献 (30)*设计人员名单 (31)一、课程设计目标1 问题描述设停车场是一个可停放n辆汽车的狭长通道,且只有一个门可供出入。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆汽车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原顺序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
2 问题分析(1)根据车辆到达停车场到车辆离开停车场时所停留的时间进行计时收费。
(2)当有车辆从停车场离开时,等待的车辆按顺序进入停车场停放。
实现停车场的调度功能。
(3)用顺序栈来表示停车场,链队表示停车场外的便道。
(4)显示停车场信息和便道信息。
(5)程序执行的命令为:○1车辆进入停车场○2车辆离开停车场○3显示停车场的信息。
二、概要设计1 抽象数据类型定义(1)栈的抽象数据类型定义AST Stack{数据对象:D={ai|ai∈ElemSet,i=1,2,...,n, n≥0}数据关系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,...,n}约定an端为栈顶,a1端为栈底。
基本操作:InitStack(&S)操作结果:构造一个空栈S。
DestroyStack(&S)初始条件:栈S已存在。
操作结果:栈S被销毁。
ClearStack(&S)初始条件:栈S已存在。
操作结果:将栈S清为空栈。
StackEmpty(S)初始条件:栈S已存在。
操作结果:若栈S为空栈,则返回TRUE,否则FALSE。
StackLength(s)初始条件:栈S已存在。
操作结果:返回S的元素个数,既栈的长度。
GetTop(S,&e)初始条件:栈S已存在且非空。
操作结果:用e返回S的栈顶元素。
Push(&S,e)初始条件:栈S已存在。
操作结果:插入元素e为新的栈顶元素。
Pop(&S,&e)初始条件:栈S已存在且非空。
操作结果:删除S的栈顶元素,并用e返回其值。
StackTraverse(S,visit())初始条件:栈S已存在且非空。
操作结果:从栈底到栈顶依次对S的每个数据元素调用函数visit()。
一旦visit()失败,则操作失效。
}ADT Stack(2)队列的抽象数据类型定义ADT 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)操作结果:构造一个空队列Q。
DestroyQueue(&Q)初始条件:队列Q已存在。
操作结果:队列Q被销毁,不再存在。
ClearQueue(&Q)初始条件:队列Q已存在。
操作结果:将Q清为空队列。
QueueEmpty(Q)初始条件:队列Q已存在。
操作结果:若Q为空队列,则返回TRUE,否则FALSE。
QueueLength(Q)初始条件:队列Q已存在。
操作结果:返回Q的元素个数,即队列的长度。
GetHead(Q,&e)初始条件:Q为非空队列。
操作结果:用e返回的队头元素。
EnQueue(&Q,e)初始条件:队列Q已存在。
操作结果:插入元素e为Q的新的队尾元素。
DeQueue(&Q,&e)初始条件:Q为非空队列。
操作结果:删除Q的队头元素,并用e返回其值。
QueueTraverse(Q,visit())初始条件:Q已存在且非空。
操作结果:从队头到队尾,依次对Q的每个数据元素调用函数visit()。
一旦visit() 失败,则操作失败。
}ADT Queue2 模块划分本程序包括六个模块:(1)主程序模块void main(){初始化停车站;初始化让路的临时栈;初始化通道;输出主菜单:车辆到达、车辆离开与计费、查看停车场信息;}(2)入场模块int arrive(SqStack *In,LinkQueue *W){车辆进入停车场;计算停车费用}(3)出场模块void leave(SqStack *In,SqStack *Out,LinkQueue *W){车辆离开停车场;}(4)输出模块void info(SqStack S,LinkQueue W){输出停车场信息;}(5)栈模块——实现栈的抽象数据类型(6)队列模块——实现队列的抽象数据类型开始输入车辆的号码及到达时间停车场是否已满进入停车场进入便道等候离开停车场停车场是否已满输出离开时间计算价格停车场里没有车辆判断变道是否为空便道里没有车辆车辆进入停车场结束三、详细设计1 数据类型的定义MAX 全局变量定义一个全局变量用来存储车库最大容量Price 全局变量定义一个全局变量用来存储每车每小时的费用typedef struct time{定义两个整型的变量,用来存放时间的小时和分钟。
}Time; /*时间结点*/typedef struct node{定义一个字符型数组存放车牌号,在定义两个Time型的时间用来存放进入停车场时间和出停车场的时间。
}Car; /*车辆信息结点*/{定义一个数组成为栈的主体,里面存放指向车辆信息Car的指针,在定义一个整型变量存放栈顶。
}SqStack; /*停车站*/typedef struct car{便道中车辆信息的定义,其中包括Car型和next指针。
}QNode;{便道,只有head指针和rear指针,指向QNode型变量,一个代表头,一个代表尾。
}LinkQueue; /*通道*/2 主要模块的算法描述本程序主要分为四部分:(1)主函数及程序框架(2)车辆到达模块(3)车辆离开模块(4)显示车辆部分。
(1)主函数○1算法分析void main(){初始化停车站 In初始化让路的临时栈 Out初始化通道 Wait进入无限循环输出程序界面1、车辆到达2、车辆离开3、停车场信息4、退出系统确定停车场的容量MAX与停车场收费标准price进入第二个无限循环让用户选择一个功能一个功能使用完毕后清屏再次输入主界面}○2函数流程图如图所示:(2)车辆到达模块○1算法分析 int arrive(SqStack *In,LinkQueue *W) {车辆进入停车场 判断停车场是否已满 若满则进入通道等候 不满则进入停车场读入车辆信息,车牌号和进入时间 }○2函数流程图如图所示(3)车辆离开模块○1算法分析 开始结束进入停车场判断停车场是否已满进入便道读入车辆信息:车牌号、进入时间读入车辆信息:车牌号是否void leave(SqStack *In,SqStack *Out,LinkQueue *W) /*车辆离开*/开始定义一个整型变量room,用来记录要离开的车辆在停车场的位置,定义车辆结点指针p和t和队列结点指针q。
if(In->top>0) /*有车*/判断停车场内是否有车,如果有车,就输入要离开的车辆在停车场的位置,否则就提示停车场没车。
这里用了while循环语句,如果输入的车辆位置超出范围,就要重新输入。
While(In->top>room) /*车辆离开*/如果栈顶位置In->top大于要离开的车位置room(即要离开的车不在停车场的门口)的话,在要离开的车辆前面的车就要先离开,开到临时停车场,即临时栈中,因此Out所表示的临时栈的栈顶top加1,用来表示临时停车场增加1辆车;接着把该车的信息拷贝到栈Out 中,然后删除栈In的栈顶(即这辆车开走)。
直到要离开的车辆前面的车都开到临时停车场之后,该车才离开,离开之后,该车的信息结点In->stack[In->top]置空,然后栈顶In->top减1。
之后就判断临时停车场是否有车,有车就一辆一辆的开回停车场里面,因此停车场的栈顶In->top 加1,然后就把临时停车场的车结点的信息拷贝到停车场的车结点上,接着删除临时停车场车的结点(Out->stack[Out->top]=NULL;Out->top--;)。
判断(W->head!=W->rear)&&In->top<MAX(即通道上是否有车及停车场是否已满),如果便道有车且停车场未满,通道的车便可进入停车场,此时指针q指向便道的头,即队头,然后停车场的栈顶In->top 加1以便增加新的车辆,接着输入队头的车辆信息,即要进去停车场的车的信息,然后便道队列的头结点指向q(即刚进入停车场的车的结点)的后继结点,即原队列中第二辆车的结点,接着判断刚离开的车是否是最后一辆车,如果是,就把队列置空,即队头等于队尾;之后就把结点t(即要进入停车场的车)的信息拷贝到停车场栈顶的车中,最后释放p的空间,即原队头结点。
○2leave 函数流程图如图所示:定义必要的变量判断停车场是否有车输出停车场里没有车前面的车先进入临时停车场车辆离开否是输入离开车辆的信息判断前面是否有其他车且停车场未满是否判断便道否有车否便道的车先进入停车场车临时停车场的车回到停车场是开始结束(4)显示车辆信息○1算法分析void info(SqStack S,LinkQueue W){输出停车场信息;其中,包含了两个函数Info1()输出停车场有关信息Info2()输出通道有关信息}void PRINT(){输出出停车站时的信息计算金钱}○2函数流程图如图所示Info1开始计算停车场内车的数量读取车辆信息输出结束开始计算便道内车的数量判断停车场否有车Info2输出结束通道无车否是PRINT开始输入车离开的时间计算车离开应支付的费用输出结束四、测试分析1 主界面2 具体操作2.1进站时间与车牌号2.2 车站已满,请进入临时车道2.3 出站与收费2.4 车辆离开,变道的车进入停车场2.5 结束五、课程设计总结通过这次课程设计使我充分的理解了用栈和队列实现模拟停车场的基本原理,知道了栈的顺序存储结构和队列的链式存储结构的定义和算法描述,同时也学会了编写停车场问题的程序。