下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):停車場(chǎng)管理姓名:韋邦權(quán)專業(yè):2013 級(jí)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)號(hào):13224624班級(jí):13052316完成日期: 1 問題描述設(shè)停車場(chǎng)是一個(gè)可停放 n 輛汽車的狹長(zhǎng)通道,且只有一個(gè)門可供出入。汽車在 停車場(chǎng)按車輛到達(dá)時(shí)間的先后順序, 依次由北向南排列 (門在最南端, 最先到達(dá)的第 一輛車停放在車場(chǎng)的最北端) ,若車場(chǎng)已停滿 n 輛汽車,則后來的汽車只能在門外的 便道上等候,一旦有車開走, 則排在便道上的第一輛汽車即可開入; 當(dāng)停車場(chǎng)某輛車 要離開時(shí), 在它之后進(jìn)入的車輛必須先退出車場(chǎng)為它讓路, 待該輛車開出大門外, 其 他車輛再按原順序進(jìn)入車場(chǎng), 每輛停放在車場(chǎng)的車在它離開停車場(chǎng)時(shí)
2、必須按它停留的 時(shí)間長(zhǎng)短交納費(fèi)用。2 需求分析(1)根據(jù)車輛到達(dá)停車場(chǎng)到車輛離開停車場(chǎng)時(shí)所停留的時(shí)間進(jìn)行計(jì)時(shí)收費(fèi)。( 2 )當(dāng)有車輛從停車場(chǎng)離開時(shí),等待的車輛按順序進(jìn)入停車場(chǎng)停放。實(shí)現(xiàn)停車 場(chǎng)的調(diào)度功能。(3)用順序棧來表示停車場(chǎng),鏈隊(duì)表示停車場(chǎng)外的便道。(4)顯示停車場(chǎng)信息和便道信息。(5)程序執(zhí)行的命令為:(1車輛進(jìn)入停車場(chǎng)(!車輛離開停車場(chǎng) ©顯示停車場(chǎng) 的信息。3 概要設(shè)計(jì)31 抽象數(shù)據(jù)類型定義( 1)棧的抽象數(shù)據(jù)類型定義AST Stack數(shù)據(jù)對(duì)象:D=ai|ai ElemSet,i=1,2,n, n> 0數(shù)據(jù)關(guān)系:R1=<ai-1,ai>|ai-1,ai
3、D, i=2,n約定 an 端為棧頂, a1 端為棧底 ?;静僮鳎篒nitStack(&S)操作結(jié)果:構(gòu)造一個(gè)空棧 S。DestroyStack(&S)初始條件:棧 S 已存在。操作結(jié)果:棧 S 被銷毀。ClearStack(&S)初始條件:棧 S 已存在。 操作結(jié)果:將棧 S 清為空棧。StackEmpty(S)初始條件:棧 S 已存在。操作結(jié)果:若棧S為空棧,則返回TRUE,否則FALSE。StackLength(s)初始條件 :棧 S 已存在。操作結(jié)果:返回 S 的元素個(gè)數(shù),既棧的長(zhǎng)度。GetTop(S,&e)初始條件:棧 S 已存在且非空。操作結(jié)果:用
4、 e 返回 S 的棧頂元素。Push(&S,e)初始條件:棧 S 已存在。 操作結(jié)果:插入元素 e 為新的棧頂元素。Pop(&S,&e)初始條件:棧 S 已存在且非空。操作結(jié)果:刪除S的棧頂元素,并用e返回其值。StackTraverse(S,visit() 初始條件:棧 S 已存在且非空。操作結(jié)果:從棧底到棧頂依次對(duì)S的每個(gè)數(shù)據(jù)元素調(diào)用函數(shù)visit()。一旦visit() 失敗,則操作失效。ADT Stack (2)隊(duì)列的抽象數(shù)據(jù)類型定義 ADT Queue數(shù)據(jù)對(duì)象:D=ai|ai ElemSet,i=1,2,,n,n> 0數(shù)據(jù)關(guān)系:R1=<ai-1,a
5、i>|ai-1,ai D,i=2,n約定其中 a1 端為隊(duì)列頭, an 為隊(duì)列尾。基本操作:InitQueue(&Q) 操作結(jié)果:構(gòu)造一個(gè)空隊(duì)列 Q 。 DestroyQueue(&Q) 初始條件:隊(duì)列 Q 已存在。 操作結(jié)果:隊(duì)列 Q 被銷毀,不再存在。ClearQueue(&Q) 初始條件:隊(duì)列 Q 已存在。 操作結(jié)果:將 Q 清為空隊(duì)列。QueueEmpty(Q) 初始條件:隊(duì)列 Q 已存在。操作結(jié)果:若Q為空隊(duì)列,則返回TRUE,否則FALSE。QueueLength(Q)初始條件:隊(duì)列 Q 已存在。操作結(jié)果:返回 Q 的元素個(gè)數(shù),即隊(duì)列的長(zhǎng)度。GetHe
6、ad(Q,&e)初始條件: Q 為非空隊(duì)列。 操作結(jié)果:用 e 返回的隊(duì)頭元素。EnQueue(&Q,e) 初始條件:隊(duì)列 Q 已存在。 操作結(jié)果:插入元素 e 為 Q 的新的隊(duì)尾元素。DeQueue(&Q,&e) 初始條件: Q 為非空隊(duì)列。 操作結(jié)果:刪除 Q 的隊(duì)頭元素,并用 e 返回其值。 QueueTraverse(Q,visit() 初始條件: Q 已存在且非空。一旦操作結(jié)果:從隊(duì)頭到隊(duì)尾,依次對(duì) Q 的每個(gè)數(shù)據(jù)元素調(diào)用函數(shù) visit() visit() 失敗,則操作失敗。ADT Queue3 2 模塊劃分本程序包括六個(gè)模塊: (1)主程序模塊vo
7、id main()初始化停車站; 初始化讓路的臨時(shí)棧; 初始化通道; 輸出主菜單:車輛到達(dá)、車輛離開與計(jì)費(fèi)、查看停車場(chǎng)信息;( 2 )入場(chǎng)模塊int arrive(SqStack *In,LinkQueue *W)車輛進(jìn)入停車場(chǎng); 計(jì)算停車費(fèi)用 ( 3 )出場(chǎng)模塊void leave(SqStack *In,SqStack *Out,LinkQueue *W)車輛離開停車場(chǎng);( 4 )輸出模塊void info(SqStack S,LinkQueue W)輸出停車場(chǎng)信息;(5)棧模塊實(shí)現(xiàn)棧的抽象數(shù)據(jù)類型(6)隊(duì)列模塊實(shí)現(xiàn)隊(duì)列的抽象數(shù)據(jù)類型4 詳細(xì)設(shè)計(jì)41 數(shù)據(jù)類型的定義int MAX; /*
8、定義一個(gè)全局變量用來存儲(chǔ)車庫(kù)最大容量 */float price;/* 定義一個(gè)全局變量用來存儲(chǔ)每車每小時(shí)的費(fèi)用 */ typedef struct timeint hour;int min;Time; /* 時(shí)間結(jié)點(diǎn) */typedef struct nodechar num10;Time reach;Time leave;Car; /* 車輛信息結(jié)點(diǎn) */typedef struct NODECar *stack100;int top;SqStack; /* 停車站 */typedef struct carCar *data;struct car *next;QNode;typedef s
9、truct NodeQNode *head;QNode *rear;LinkQueue; /* 通道 */4 2 主要模塊的算法描述本程序主要分為四部分: (1)主函數(shù)及程序框架、 (2)車輛到達(dá)模塊、(3)車 輛離開模塊、(4 )顯示車輛信息模塊,(1)主函數(shù)void main()SqStack In,Out; LinkQueue Wait;int ch;InitStack(&In); /* 初始化停車站 */InitStack(&Out); /* 初始化讓路的臨時(shí)棧 */InitQueue(&Wait); /* 初始化通道 */while(1)printf(&quo
10、t; 歡迎使用停車場(chǎng)管理系統(tǒng)n");printf("t 本系統(tǒng)由 5011 工作室開發(fā),作者 :鄧春國(guó)、段慶龍、梁偉明、 丁磊。 nn");printf(" 請(qǐng)輸入停車場(chǎng)的容量 :");scanf("%d",&MAX);printf(" 請(qǐng)輸入停車場(chǎng)的收費(fèi)標(biāo)準(zhǔn) (元/ 小時(shí)):");scanf("%f",&price);printf("您輸入的停車場(chǎng)容量為d位,費(fèi)用為2.1f元/小時(shí)。 n",MAX,price);printf("n (1)
11、車輛到達(dá)n車輛離開n (3)停車場(chǎng)信息n (4)退出系統(tǒng) n 請(qǐng)選擇 n");while(1)ch=getch();switch(ch)case 49:arrive(&In,&Wait);break; /* 車輛到達(dá) */case 50:leave(&In,&Out,&Wait);break; /* 車輛離開 */ case 51:info(In,Wait);break; /* 輸出車站信息 */ case 52:printf(" 使用! ");exit(0); /* 退出主程序 */ default:printf(&quo
12、t;n 按鍵無效,請(qǐng)重新按鍵選擇! ");/*49 -52分別表示“ 1”-“4”這四個(gè)按鍵的鍵值 */ system("CLS");printf(" 歡迎使用停車場(chǎng)管理系統(tǒng)n");printf("t本系統(tǒng)由CG工作室開發(fā),作者:鄧春國(guó)、段慶龍、梁偉明、 丁磊。 nnn");printf("您輸入的停車場(chǎng)容量為d位,費(fèi)用為2.1f元/小時(shí)。n",MAX,price);printf("n (1)車輛到達(dá)n (2)車輛離開n (3)停車場(chǎng)信息n (4)退出 系統(tǒng)n請(qǐng)選擇n");(2)車輛離
13、開模塊I算法分析void leave(SqStack *In,SqStack *Out,LinkQueue *W) /*車輛離開*/int room;Car *p,*t;QNode *q;/* 開始定義一個(gè)整型變量 room ,用來記錄要離開的車輛在停車場(chǎng)的位置,定 義車輛結(jié)點(diǎn)指針 p 和 t 和隊(duì)列結(jié)點(diǎn)指針 q 。*/if(In->top>0) /* 有車 */while(1)printf("n 請(qǐng)輸入車在停車場(chǎng)的位置 (1-%d) : ",In->top); scanf("%d",&room);if(room>=1&a
14、mp;&room<=In->top) break;/* 判斷停車場(chǎng)是否有車,如果有車,就輸入要離開的車輛在停車場(chǎng)的位置,否 則就提示停車場(chǎng)沒車。這里用了 while 循環(huán)語句,如果輸入的車輛位置超出圍,就 要重新輸入。 */while(In->top>room) /* 車輛離開 */Out->top+;Out->stackOut->top=In->stackIn->top; In->stackIn->top=NULL;In->top-;/* 如果棧頂位置 In->top 大于要離開的車位置 room (即要離
15、開的車不在停 車場(chǎng)的門口)的話,在要離開的車輛前面的車就要先離開,開到臨時(shí)停車場(chǎng),即臨時(shí) 棧中,因此 Out 所表示的臨時(shí)棧的棧頂 top 加 1 ,用來表示臨時(shí)停車場(chǎng)增加 1 輛 車;接著把該車的信息拷貝到棧 Out 中,然后刪除棧 In 的棧頂(即這輛車開走) 。 */p=In->stackIn->top;In->stackIn->top=NULL;In->top-; while(Out->top>=1)In->top+;In->stackIn->top=Out->stackOut->top; Out->stac
16、kOut->top=NULL; Out->top-;/* 直到要離開的車輛前面的車都開到臨時(shí)停車場(chǎng)之后, 該車才離開,離開之后, 該車的信息結(jié)點(diǎn) In->stackIn->top 置空,然后棧頂 In->top 減 1 。之后就判 斷臨時(shí)停車場(chǎng)是否有車,有車就一輛一輛的開回停車場(chǎng)里面,因此停車場(chǎng)的棧頂 In->top 加 1,然后就把臨時(shí)停車場(chǎng)的車結(jié)點(diǎn)的信息拷貝到停車場(chǎng)的車結(jié)點(diǎn)上,接 著刪除臨時(shí)停車場(chǎng)車的結(jié)點(diǎn) (即Out->stackOut->top=NULL;Out->top-;)。 */PRINT(p,room); if(W->h
17、ead!=W->rear)&&In->top<MAX) q=W->head->next;t=q->data;In->top+;printf("n便道的s號(hào)車進(jìn)入車場(chǎng)第d號(hào)停車位。",t->num,In->top);printf("n 請(qǐng)輸入現(xiàn)在的時(shí)間 (格式“ *:* ” ):"); scanf("%d:%d",&(t->reach.hour),&(t->reach.min); W->head->next=q->next
18、;if(q=W->rear) W->rear=W->head;In->stackIn->top=t;free(q);/* 判斷 (W->head!=W->rear)&&In->top<MAX(即通道上是否有車及停車場(chǎng)是否已滿),如果便道有車且停車場(chǎng)未滿,通道的車便可進(jìn)入停車場(chǎng),此時(shí) 指針q指向便道的頭,即隊(duì)頭,然后停車場(chǎng)的棧頂In->top加1以便增加新的車輛,接著輸入隊(duì)頭的車輛信息, 即要進(jìn)去停車場(chǎng)的車的信息, 然后便道隊(duì)列的頭結(jié)點(diǎn) 指向q (即剛進(jìn)入停車場(chǎng)的車的結(jié)點(diǎn))的后繼結(jié)點(diǎn),即原隊(duì)列中第二輛車的結(jié)點(diǎn),接 著判斷
19、剛離開的車是否是最后一輛車,如果是,就把隊(duì)列置空,即隊(duì)頭等于隊(duì)尾;之后就把結(jié)點(diǎn)t (即要進(jìn)入停車場(chǎng)的車)的信息拷貝到停車場(chǎng)棧頂?shù)能囍?,最后釋放p的空間,即原隊(duì)頭結(jié)點(diǎn)。*/else printf("n停車場(chǎng)里沒有車n"); /*沒車*/printf("請(qǐng)按任意鍵返回");getch();圖4.1 leave函數(shù)流程圖5測(cè)試分析測(cè)試數(shù)據(jù)及結(jié)果如下:輸入2輛車的信息,如圖5.2所示:再輸入2輛車的信息,如圖最后選擇車輛離開,輸入第2輛車離開,如圖日收扌居22進(jìn)車場(chǎng)時(shí)刻:出車場(chǎng)時(shí)刻:停留時(shí)間所在的停車位為:2選揮 i<fl,D,E>請(qǐng)選擇:<A
20、,D,E)-停車場(chǎng)爸理程序-車牌號(hào):2iS'SS'SSSSSS應(yīng)付(元)汽車進(jìn)車場(chǎng) D汽車岀車場(chǎng) *E退岀程序*'C:User5 Adm n i 11 rat?r. PC -20141024YL PI' Des let g pDeb dgCp|t 1.ex e6課程設(shè)計(jì)總結(jié)通過這次課程設(shè)計(jì)使我充分的理解了用棧和隊(duì)列實(shí)現(xiàn)模擬停車場(chǎng)的基本原理,知道了棧的順序存儲(chǔ)結(jié)構(gòu)和隊(duì)列的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的定義和算法描述,同時(shí)也學(xué)會(huì)了編寫停車場(chǎng)問題的程序。雖然此次的程序不是很完備,沒有加入一些更完善的功能,但是 總體還是一個(gè)比較能體現(xiàn)數(shù)據(jù)結(jié)構(gòu)知識(shí)點(diǎn)能力的程序了,當(dāng)然只是相對(duì)于我這個(gè)初學(xué)
21、者來說。在剛開始編程的時(shí)候,我感到有點(diǎn)無從下手,但經(jīng)過對(duì)題目的詳細(xì)分析和思 考之后,我就知道具體應(yīng)該做什么,怎么做了。經(jīng)過幾天和同學(xué)的一起研究,我完成 這個(gè)程序,我學(xué)到了很多東西,這是在課堂上無法做到的。源程序#in clude<stdio.h>#in elude <stdlib.h>#include<iostream.h> #include<string.h>#include<math.h>#define size 1 / 停車場(chǎng)位置數(shù)/ 模擬停車場(chǎng)的堆棧的性質(zhì);typedef struct zanlindint number; /
22、 汽車車號(hào)int ar_time; / 汽車到達(dá)時(shí)間zanInode;typedef structzanInode *base; / 停車場(chǎng)的堆棧底zanInode *top; / 停車場(chǎng)的堆棧頂int stacksize_curren;stackhead;/ 堆棧的基本操作;void initstack(stackhead &L)/ 構(gòu)造一個(gè)空棧L.base=(zanInode*)malloc(size*sizeof(zanlind); if(!L.base) exit(0);L.top=L.base;L.stacksize_curren=0;*L.top+=e;L.stacksiz
23、e_curren+;void pop(stackhead &L,zanInode &e) / 把元素 e 彈出 s 棧if(L.top=L.base)cout<<" 停車場(chǎng)為空 !"return;e=*-L.top;L.stacksize_curren-;/ 模擬便道的隊(duì)列的性質(zhì);typedef struct duilieint number; / 汽車車號(hào)int ar_time; / 汽車到達(dá)時(shí)間struct duilie *next;*queueptr;typedef structqueueptr rear; / 便道的隊(duì)列的隊(duì)尾int le
24、ngth;linkqueue;/ 隊(duì)列的基本操作;void initqueue(linkqueue &q) / 構(gòu)造一個(gè)空隊(duì)列 q.front=q.rear=(queueptr)malloc(sizeof(duilie); if(!q.front|!q.rear)exit(0);q.front->next=NULL;q.length=0;把元素的插入隊(duì)列(屬性為number ,void enqueue(linkqueue &q,int number,int ar_time) / ar_time )queueptr p; p=(queueptr)malloc(sizeof(
25、duilie);if(!p) exit(0);p->number=number;p->ar_time=ar_time;p->next=NULL;q.rear->next=p;q.rear=p;q.length+;numbervoid popqueue(linkqueue &q,queueptr &w) / 把元素的插入隊(duì)列(屬性為 ar_time )queueptr p;if(q.front=q.rear)cout<<" 停車場(chǎng)的通道為空 ! !"<<endl;return;p=q.front->next
26、;w=p;q.front->next=p->next;q.length-;if(q.rear=p) q.front=q.rear;void jinru(stackhead &st,linkqueue &q) / 對(duì)進(jìn)入停車場(chǎng)的汽車的處理;int number,time_a;cout<<" 車牌為: "cin>>number;cout<<" 進(jìn)場(chǎng)的時(shí)刻 :"cin>>time_a;if(st.stacksize_curren<2)zanInode e;e.number=num
27、ber;e.ar_time=time_a;push(st,e);cout<< " 該車已進(jìn)入停車場(chǎng)在 : "<<st.stacksize_curren<<" 號(hào)車道 "<<endl<<endl;elseenqueue(q,number,time_a);cout<<" 停車場(chǎng)已滿,該車先停在便道的第 "<<q.length<<" 個(gè)位置上 "<<endl;void likai(stackhead &st
28、,stackhead &sl,linkqueue &q) /對(duì)離開的汽車的處理;int number,time_d,flag=1,money,arrivaltime; /q 為便道隊(duì)列 cout<<" 車牌為: "cin>>number;cout<<" 出場(chǎng)的時(shí)刻: "cin>>time_d;zanInode e,q_to_s;queueptr w;while(flag) / 找到要開出的車,并彈出停車場(chǎng)棧pop(st,e);push(sl,e);if(e.number=number)fla
29、g=0;money=(time_d-e.ar_time)*2;arrivaltime=e.ar_time;pop(sl,e); / 把臨時(shí)堆棧的第一輛車(要離開的)去掉; while(sl.stacksize_curren) / 把倒車場(chǎng)的車倒回停車場(chǎng)push(st,e);if(st.stacksize_curren<2&&q.length!=0) / 停車場(chǎng)有空位,便道上的車開進(jìn)入停車場(chǎng)popqueue(q,w);q_to_s.ar_time=time_d;q_to_s.number=w->number;push(st,q_to_s);cout<<" 車 牌 為 "<<q_to_s.number<<" 的 車 已 從 通 道 進(jìn) 入 停 車 場(chǎng) , 所 在 的 停 車 位為 :"<<st.stacksize_curren<<endl<<endl;cout<<"n 收 據(jù) "<<endl;cout<<" = 車牌號(hào) : "<<number<<e
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度房地產(chǎn)稅務(wù)代辦與規(guī)劃審批協(xié)議2篇
- 2025年浙教版七年級(jí)科學(xué)上冊(cè)月考試卷含答案
- 二零二五年房產(chǎn)投資風(fēng)險(xiǎn)評(píng)估獨(dú)家委托協(xié)議3篇
- 2025年西師新版七年級(jí)化學(xué)下冊(cè)階段測(cè)試試卷含答案
- 餐廳課程設(shè)計(jì)slp
- 2024版原材料采購(gòu)運(yùn)輸合同范本
- 2025年湘教版四年級(jí)語文下冊(cè)階段測(cè)試試卷
- 二零二五年度酒吧整體轉(zhuǎn)讓合同范本集3篇
- 2025年人教版高二物理下冊(cè)月考試卷含答案
- 2025年冀教新版五年級(jí)英語上冊(cè)階段測(cè)試試卷
- 2025年競(jìng)聘醫(yī)院內(nèi)科醫(yī)生崗位演講稿模版(3篇)
- 虛擬貨幣地址分析技術(shù)的研究-洞察分析
- 綠色供應(yīng)鏈管理制度內(nèi)容
- 心理學(xué)基礎(chǔ)知識(shí)考試參考題庫(kù)500題(含答案)
- 電力智慧檢修安全運(yùn)行三維可視化管理平臺(tái)建設(shè)方案
- 一年級(jí)數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)集錦
- 消防安全應(yīng)急預(yù)案下載
- 《北航空氣動(dòng)力學(xué)》課件
- 附件:財(cái)政業(yè)務(wù)基礎(chǔ)數(shù)據(jù)規(guī)范(3.0版)
- 電商公司售后服務(wù)管理制度
- 火災(zāi)應(yīng)急處理課件
評(píng)論
0/150
提交評(píng)論