停车场管理地实现.doc

上传人:scccc 文档编号:13563489 上传时间:2022-01-16 格式:DOC 页数:12 大小:198.50KB
返回 下载 相关 举报
停车场管理地实现.doc_第1页
第1页 / 共12页
停车场管理地实现.doc_第2页
第2页 / 共12页
停车场管理地实现.doc_第3页
第3页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《停车场管理地实现.doc》由会员分享,可在线阅读,更多相关《停车场管理地实现.doc(12页珍藏版)》请在三一文库上搜索。

1、停车场管理的实现一、程序中所采用的数据结构及存储结构的说明以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模 拟管理。栈以顺序结构实现,队列以链表实现。程序中分别采用了“栈”和“队列”作为其存储结构。“栈”的定义可知,每一次入栈的元素都在原栈顶元素之上成为新的元素,每一次出栈的 元素总是当前栈顶元素使次栈元素成为新的栈顶元素,即最后进栈者先出栈。程序中采用 的结构是:typedef struct NODECarNode *stackMAX+1;int top;SeqStackCar; /* 模拟车库 */“队列”是限定所有插入操作只能在表的一端进行,而所有的删除操作都只

2、能在表的另一 端进行。插入端叫队尾,删除端叫对头。按先进先出规则进行。程序中采用的结构是: typedef struct NodeQueueNode *head;QueueNode *rear;LinkQueueCar; /* 模拟通道 */二、算法的设计思想 由于停车场是一个狭窄通道, 而且只有一个大门可供汽车进出, 问题要求汽车停车 场内按车辆到达时间的先后顺序,依次由北向南排列。由此很容易联想到数据结构中的 堆栈模型,因此可首先设计一个堆栈,以堆栈来模拟停车场,又每个汽车的车牌号都不 一样,这样一来可以根据车牌号准确找到汽车位置,所以堆栈里的数据元素我设计成汽 车的车牌号。当停车场内某辆

3、车要离开时,在他之后进入的车辆必须先退出车场为它让 路,待该辆车开出大门外,其他车辆再按原次序进入停车场。这是个一退一进的过程, 而且让道的汽车必须保持原有的先后顺序,因此可再设计一个堆栈,以之来暂时存放为 出站汽车暂时让道的汽车车牌号。当停车场满后,继续进来的汽车需要停放在停车场旁 边的便道上等候,若停车场有汽车开走,则按排队的先后顺序依次进站,最先进入便道 的汽车将会最先进入停车场,这完全是一个先进先出模型,因此可设计一个队列来模拟 便道,队列中的数据元素仍然设计成汽车的车牌号。另外,停车场根据汽车在停车场内 停放的总时长来收费的,在便道上的时间不计费,因此必须记录车辆进入停车场时的时 间

4、,车辆离开停车场时的时间不需要记录,当从终端输入时可直接使用。由于时间不象 汽车一样需要让道,我设计了一个顺序表来存放时间。又用顺序表用派生法设计了一个 堆栈,恰好满足上面模拟停车场的需要。三、时间复杂度的分析说明:对时间复杂度的分析,均指在最坏情况下的时间复杂度。在栈结构中:(1) 初始化栈(即车库) ,使车库为空的,此时 , 时间复杂度 =O(max)。(2) 停车最坏的情况是要车位已经满,此时 ,时时间复杂度 =O(1) 。(3) 关于车辆离开的时间复杂度 =O(max)。(4) 车场信息的显示的时间复杂度 =O(1) 。在队列结构中:(1) 出场车的信息的时间复杂度=0( 1 )。(2

5、) 判断通道上是否有车及车站是否已满,此时,时间复杂度O=( max)。(3) 车辆停车费用的时间复杂度 0=(1)。四. 设计原理、框图五.运行结果车辆进入车场:1-辛辆列达士 盂舸萬开H-歹龙显示皿遇出極丄I诵输人干牌弓H*r刊 1111年擀Tt牛场隼1仲置 请辎到达时间:1 2 : e a亿钿到这士主辆离开誤列表显示匸退岀sa1请嘀入年牌号f例初;闽时為町:k 2 S 1 宇班在手场第P位旨一幕输入割li左旳j电:*/1 ; n1 耳辆列达睥盂鞭离幵叽科春冠TU*退岀系统1淸辅人年牌号f例如:闻祈翎忖;h S & 5 5丰捫在车场第述音.flSXi达时板-X*: *+/a * a n仁辛

6、晒到达沢主整离开J”歹J衷显不4起出系筑*仁车袖到达空耳辆离开3 .列養显示车场已满:仁斗辆到达2占辅离廿匸列表显不 缶退岀餐绕1情埔入牟牌号涮如.闽站23卅M K H 谏车须在愎迫香恃车辆离开,并收费:仁丰輒刮迖筑车辆离开M列表见示-遇出茶统2第输匕丰在车切的位置门7儿2清陶人离幵的盯间:严*:“/4:90离开丰辆的车牌吕为:k?S1 D其到达吋闫为;1沖命左膏用为元亠 偿畲防K朋抽寻耳労人彌篤勺整吿.离芳时问为:4;0列出车场信息:档邛0门齐朽1 1Z;0d11II2 H油砧9弗3 :口a8R8列出车道信息:37 毎场!请1.2-3.2#in clude#in clude#in clude

7、/* */#define MAX 3 /* 车库容量 */#define price 0.05 /*每车每分钟费用*/typedef struct timeint hour;int min;Time; /*时间结点*/typedef struct no dechar num10;Time reach;Time leave;CarNode; /*车辆信息结点*/typedef struct NODECarNode *stackMAX+1;int top;SeqStackCar; /* 模拟车场 */typedef struct carCarNode *data;struct car *n ext

8、;QueueNode;typedef struct NodeQueueNode *head;QueueNode *rear;LinkQueueCar; /* 模拟通道 */*/车辆离开 */void InitStack(SeqStackCar *); /* 初始化栈 */ int InitQueue(LinkQueueCar *); /* 初始化便道 */ int Arrival(SeqStackCar *,LinkQueueCar *); /* 车辆到达 */ void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /* void Li

9、st(SeqStackCar,LinkQueueCar); /* 显示存车信息 */ /*/void main()SeqStackCar Enter,Temp;LinkQueueCar Wait;int ch;InitStack(&Enter); /* 初始化车站 */InitStack(&Temp); /* 初始化让路的临时栈 */ InitQueue(&Wait); /* 初始化通道 */ while(1)printf(n1. 车辆到达 ); printf( 2. 车辆离开 );printf( 3. 列表显示 );printf( 4. 退出系统 );while(1)scanf(%d,&ch

10、);if(ch=1&chtop=0; for(i=0;istacks-top=NULL;int InitQueue(LinkQueueCar *Q) /* 初始化便道 */Q-head=(QueueNode *)malloc(sizeof(QueueNode); if(Q-head!=NULL)Q-head-next=NULL; Q-rear=Q-head; return(1);else return(-1);void PRINT(CarNode *p,int room) /* 打印出场车的信息 */ int A1,A2,B1,B2;printf(n 请输入离开的时间 :/*:*/);scan

11、f(%d:%d,&(p-leave.hour),&(p-leave.min);printf(n 离开车辆的车牌号为 :);puts(p-num);printf(n 其到达时间为 : %d:%d,p-reach.hour,p-reach.min);printf( 离开时间为 : %d:%d,p-leave.hour,p-leave.min);A1=p-reach.hour;A2=p-reach.min;B1=p-leave.hour;B2=p-leave.min;printf(n 应交费用为 :%2.1f 元 ,(B1-A1)*60+(B2-A2)*price); free(p);int Arr

12、ival(SeqStackCar *Enter,LinkQueueCar *W) /* 车辆到达 */CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode);flushall();printf(n 请输入车牌号 (例如:闽 A1234):);gets(p-num);if(Enter-toptop+;printf(n 车辆在车场第 %d 位置 .,Enter-top);printf(n 请输入到达时间 :/*:*/); scanf(%d:%d,&(p-reach.hour),&(p-reach.min);Enter-stackEnt

13、er-top=p;return(1);else /*车场已满 ,车进便道 */printf(n 该车须在便道等待 !);t=(QueueNode *)malloc(sizeof(QueueNode);t-data=p;t-next=NULL;W-rear-next=t;W-rear=t;return(1);void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) /* 车辆离开 */int i, room;CarNode *p,*t;QueueNode *q;/* 判断车场内是否有车 */if(Enter-top0) /*

14、 有车 */while(1) /* 输入离开车辆的信息 */printf(n 请输入车在车场的位置 /1-%d/ : ,Enter-top); scanf(%d,&room);if(room=1&roomtop) break;while(Enter-toproom) /* 车辆离开 */Temp-top+;Temp-stackTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL;Enter-top-;p=Enter-stackEnter-top;Enter-stackEnter-top=NULL;Enter-top-; while(T

15、emp-top=1)Enter-top+;Enter-stackEnter-top=Temp-stackTemp-top; Temp-stackTemp-top=NULL;Temp-top-;PRINT(p,room);/* 判断通道上是否有车及车站是否已满*/if(W-head!=W-rear)&Enter-tophead-next;t=q-data;Enter-top+;printf(n 便道的 %s 号车进入车场第 %d 位置 .,t-num,Enter-top); printf(n 请输入现在的时间 /*:*/:);scanf(%d:%d,&(t-reach.hour),&(t-rea

16、ch.min); W-head-next=q-next;if(q=W-rear) W-rear=W-head;Enter-stackEnter-top=t;free(q);else printf(n 便道里没有车 .n);else printf(n 车场里没有车 .); /* 没车 */void List1(SeqStackCar *S) /* 列表显示车场信息 */int i;if(S-top0) /* 判断车站内是否有车 */printf(n 车场 :);printf(n 位置 到达时间 车牌号 n);for(i=1;itop;i+)printf( %d ,i);printf(%d:%d

17、,S-stacki-reach.hour,S-stacki-reach.min);puts(S-stacki-num);else printf(n 车场里没有车 );void List2(LinkQueueCar *W) /* 列表显示便道信息 */QueueNode *p;p=W-head-next;if(W-head!=W-rear) /* 判断通道上是否有车 */printf(n 等待车辆的号码为 :);while(p!=NULL)puts(p-data-num);p=p-next;else printf(n 便道里没有车 .);void List(SeqStackCar S,LinkQueueCar W)int flag,tag;flag=1;while(flag)printf(n 请选择 1|2|3:);printf(n1.车场 n2.便道 n3.返回 n);while(1)scanf(%d,&tag);if(tag=1|tag=3) break;else printf(n 请选择 1|2|3:);switch(tag)case 1:List1(&S);break; /* 列表显示车场信息 */ case 2:List2(&W);break; /* 列表显示便道信息 */ case 3:flag=0;break;default: break;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1