ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:99.71KB ,
资源ID:9455191      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-9455191.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(停车场.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

停车场.docx

1、停车场数据结构设计:停车场管理姓名:张鹏翔专业:物联网工程学号:13055533指导老师:王立波完成日期:2013.12.251 问题描述设停车场是一个可停放n辆汽车的狭长通道,且只有一个门可供出入。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆汽车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原顺序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。

2、2 需求分析(1)根据车辆到达停车场到车辆离开停车场时所停留的时间进行计时收费。(2)当有车辆从停车场离开时,等待的车辆按顺序进入停车场停放。实现停车场的调度功能。(3)用顺序栈来表示停车场,链队表示停车场外的便道。(4)显示停车场信息和便道信息。(5)程序执行的命令为:车辆进入停车场车辆离开停车场显示停车场的信息。31数据类型的定义int MAX; /*定义一个全局变量用来存储车库最大容量*/ float price;/* 定义一个全局变量用来存储每车每小时的费用*/ typedef struct time int hour; int min; Time; /*时间结点*/ typedef

3、struct node char num10; Time reach; Time leave; Car; /*车辆信息结点*/ typedef struct NODE Car *stack100; int top; SqStack; /*停车站*/ typedef struct car Car *data; struct car *next; QNode; typedef struct Node QNode *head; QNode *rear; LinkQueue; /*通道*/ 32主要模块的算法描述本程序主要分为四部分:(1)主函数及程序框架、(2)车辆到达模块、(3)车辆离开模块、(4

4、)显示车辆信息模块,(1)主函数void main() SqStack In,Out; LinkQueue Wait; int ch; InitStack(&In); /*初始化停车站*/ InitStack(&Out); /*初始化让路的临时栈*/ InitQueue(&Wait); /*初始化通道*/ while(1) printf(-欢迎使用停车场管理系统-n); printf(t本系统由5011工作室开发,作者:邓春国、段庆龙、梁伟明、丁磊。nn); printf(请输入停车场的容量:); scanf(%d,&MAX); printf(请输入停车场的收费标准(元/小时):); scan

5、f(%f,&price); printf(您输入的停车场容量为%d位,费用为%2.1f元/小时。n,MAX,price); printf(n(1)车辆到达n(2)车辆离开n(3)停车场信息n(4)退出系统n请选择n); while(1) ch=getch(); switch(ch) case 49:arrive(&In,&Wait);break; /*车辆到达*/ case 50:leave(&In,&Out,&Wait);break; /*车辆离开*/ case 51:info(In,Wait);break; /*输出车站信息*/ case 52:printf(谢谢使用!);exit(0);

6、 /*退出主程序*/ default:printf(n按键无效,请重新按键选择!); /*49-52分别表示“1”-“4”这四个按键的键值*/ system(CLS); printf(-欢迎使用停车场管理系统-n); printf(t本系统由CG工作室开发,作者:邓春国、段庆龙、梁伟明、丁磊。nnn); printf(您输入的停车场容量为%d位,费用为%2.1f元/小时。n,MAX,price); printf(n(1)车辆到达n(2)车辆离开n(3)停车场信息n(4)退出系统n请选择n); (2)车辆离开模块算法分析void leave(SqStack *In,SqStack *Out,Li

7、nkQueue *W) /*车辆离开*/ int room; Car *p,*t;QNode *q;/*开始定义一个整型变量room,用来记录要离开的车辆在停车场的位置,定义车辆结点指针p和t和队列结点指针q。*/ if(In-top0) /*有车*/ while(1) printf(n请输入车在停车场的位置(1-%d):,In-top); scanf(%d,&room); if(room=1&roomtop) break; /*判断停车场内是否有车,如果有车,就输入要离开的车辆在停车场的位置,否则就提示停车场没车。这里用了while循环语句,如果输入的车辆位置超出范围,就要重新输入。*/ w

8、hile(In-toproom) /*车辆离开*/ Out-top+; Out-stackOut-top=In-stackIn-top; In-stackIn-top=NULL;In-top-; /*如果栈顶位置In-top大于要离开的车位置room(即要离开的车不在停车场的门口)的话,在要离开的车辆前面的车就要先离开,开到临时停车场,即临时栈中,因此Out所表示的临时栈的栈顶top加1,用来表示临时停车场增加1辆车;接着把该车的信息拷贝到栈Out中,然后删除栈In的栈顶(即这辆车开走)。*/ p=In-stackIn-top; In-stackIn-top=NULL;In-top-; whi

9、le(Out-top=1) In-top+;In-stackIn-top=Out-stackOut-top; Out-stackOut-top=NULL; Out-top-; /*直到要离开的车辆前面的车都开到临时停车场之后,该车才离开,离开之后,该车的信息结点In-stackIn-top置空,然后栈顶In-top减1。之后就判断临时停车场是否有车,有车就一辆一辆的开回停车场里面,因此停车场的栈顶In-top 加1,然后就把临时停车场的车结点的信息拷贝到停车场的车结点上,接着删除临时停车场车的结点 (即Out-stackOut-top=NULL;Out-top-;)。*/ PRINT(p,ro

10、om); if(W-head!=W-rear)&In-tophead-next;t=q-data;In-top+; printf(n便道的%s号车进入车场第%d号停车位。,t-num,In-top); printf(n请输入现在的时间(格式“*:*”):); scanf(%d:%d,&(t-reach.hour),&(t-reach.min); W-head-next=q-next; if(q=W-rear) W-rear=W-head; In-stackIn-top=t; free(q); /*判断(W-head!=W-rear)&In-toptop 加1以便增加新的车辆,接着输入队头的车辆

11、信息,即要进去停车场的车的信息,然后便道队列的头结点指向q(即刚进入停车场的车的结点)的后继结点,即原队列中第二辆车的结点,接着判断刚离开的车是否是最后一辆车,如果是,就把队列置空,即队头等于队尾;之后就把结点t(即要进入停车场的车)的信息拷贝到停车场栈顶的车中,最后释放p的空间,即原队头结点。*/ else printf(n停车场里没有车n); /*没车*/ printf(请按任意键返回); getch(); leave函数流程图如图4.1所示:图4.1 leave函数流程图否是是是否否4 测试数据如下:5 课程设计总结通过这次课程设计使我充分的理解了用栈和队列实现模拟停车场的基本原理,知道

12、了栈的顺序存储结构和队列的链式存储结构的定义和算法描述,同时也学会了编写停车场问题的程序。虽然此次的程序不是很完备,没有加入一些更完善的功能,但是总体还是一个比较能体现数据结构知识点能力的程序了,当然只是相对于我这个初学者来说。在刚开始编程的时候,我感到有点无从下手,但经过对题目的详细分析和思考之后,我就知道具体应该做什么,怎么做了。经过几天和同学的一起研究,我完成这个程序,我学到了很多东西,这是在课堂上无法做到的。附件:源程序#include#include #include#include#include#define size 1 /停车场位置数/模拟停车场的堆栈的性质;typedef

13、struct zanlind int number; /汽车车号 int ar_time; /汽车到达时间zanInode;typedef struct zanInode *base; /停车场的堆栈底 zanInode *top; /停车场的堆栈顶 int stacksize_curren;stackhead;/堆栈的基本操作;void initstack(stackhead &L) /构造一个空栈 L.base=(zanInode*)malloc(size*sizeof(zanlind); if(!L.base) exit(0); L.top=L.base; L.stacksize_cur

14、ren=0;void push(stackhead &L,zanInode e) /把元素e压入s栈 *L.top+=e; L.stacksize_curren+;void pop(stackhead &L,zanInode &e) /把元素e弹出s栈 if(L.top=L.base) coutnext=NULL; q.length=0;void enqueue(linkqueue &q,int number,int ar_time) /把元素的插入队列(属性为number,ar_time) queueptr p; p=(queueptr)malloc(sizeof(duilie); if(!

15、p) exit(0); p-number=number; p-ar_time=ar_time; p-next=NULL; q.rear-next=p; q.rear=p; q.length+;void popqueue(linkqueue &q,queueptr &w) /把元素的插入队列(属性为number,ar_time) queueptr p; if(q.front=q.rear) cout停车场的通道为空 ! !next; w=p; q.front-next=p-next; q.length-; if(q.rear=p) q.front=q.rear; void jinru(stack

16、head &st,linkqueue &q) /对进入停车场的汽车的处理; int number,time_a; coutnumber; couttime_a; if(st.stacksize_curren2) zanInode e; e.number=number; e.ar_time=time_a; push(st,e); cout 该车已进入停车场在: st.stacksize_curren 号车道endlendl; else enqueue(q,number,time_a); cout停车场已满,该车先停在便道的第q.length个位置上endl; void likai(stackhe

17、ad &st,stackhead &sl,linkqueue &q) /对离开的汽车的处理; /st堆栈为停车场,sl堆栈为倒车场 int number,time_d,flag=1,money,arrivaltime; /q为便道队列 coutnumber; couttime_d; zanInode e,q_to_s; queueptr w; while(flag) /找到要开出的车,并弹出停车场栈 pop(st,e); push(sl,e); if(e.number=number) flag=0; money=(time_d-e.ar_time)*2; arrivaltime=e.ar_ti

18、me; pop(sl,e); /把临时堆栈的第一辆车(要离开的)去掉; while(sl.stacksize_curren) /把倒车场的车倒回停车场 pop(sl,e); push(st,e); if(st.stacksize_currennumber; push(st,q_to_s); cout车牌为q_to_s.number的车已从通道进入停车场,所在的停车位为:st.stacksize_currenendlendl; coutn 收 据endl; cout = 车牌号: numberendl; cout=endl; cout|进车场时刻 | 出车场时刻 | 停留时间 | 应付(元)|e

19、ndl; cout=endl; cout| arrivaltime | time_d | time_d-arrivaltime | money |endl; cout-endlendl; void main()int m=100;char flag; /进入或离开的标识;stackhead sting,slinshi; /停车场和临时倒车场堆栈的定义;linkqueue line; /队列的定义;initstack(sting); /构造停车场堆栈stinginitstack(slinshi); /构造倒车场堆栈slinshiinitqueue(line); /构造便道队列linewhile(m) coutn * 停车场管理程序 *endl; cout=endl; cout* *endl; cout* A - 汽车 进 车场 D - 汽车 出 车场 *endl; cout* *endl; cout* E - 退出 程序 *endl; cout=endl; coutflag; switch(flag) case A: jinru(sting,line);break; /汽车进车场 case D: likai(sting,slinshi,line);break; /汽车出车场 case E: exit(0); m-;

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2