停車場數(shù)據(jù)結(jié)構(gòu)實驗報告附代碼.doc_第1頁
停車場數(shù)據(jù)結(jié)構(gòu)實驗報告附代碼.doc_第2頁
停車場數(shù)據(jù)結(jié)構(gòu)實驗報告附代碼.doc_第3頁
停車場數(shù)據(jù)結(jié)構(gòu)實驗報告附代碼.doc_第4頁
停車場數(shù)據(jù)結(jié)構(gòu)實驗報告附代碼.doc_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

數(shù)據(jù)結(jié)構(gòu)實驗報告實驗三 停車場模擬管理程序的設(shè)計與實現(xiàn)本實驗的目的是進一步理解線性表的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu),進一步提高使用理論知識指導(dǎo)解決實際問題的能力。一、【問題描述】設(shè)停車場只有一個可停放幾輛汽車的狹長通道,且只有一個大門可供汽車進出。汽車在停車場內(nèi)按車輛到達的先后順序依次排列,若車場內(nèi)已停滿幾輛汽車,則后來的汽車只能在門外的便道上等候,一旦停車場內(nèi)有車開走,則排在便道上的第一輛車即可進入;當停車場內(nèi)某輛車要離開時,由于停車場是狹長的通道,在它之后開入的車輛必須先退出車場為它讓路,待該車輛開出大門,為它讓路的車輛再按原次序進入車場。在這里假設(shè)汽車不能從便道上開走,試設(shè)計這樣一個停車場模擬管理程序。為了以下描述的方便,停車場的停車場用“停車位”進行敘述,停車場的便道用“便道”進行敘述。二、【數(shù)據(jù)結(jié)構(gòu)設(shè)計】1、為了便于區(qū)分每輛汽車并了解每輛車當前所處的位置,需要記錄汽車的牌照號碼和汽車的當前狀態(tài),所以為汽車定義一個新的類型CAR,具體定義如下:typedef structchar *license /汽車牌照號碼,定義為一個字符指針類型char state; /汽車當前狀態(tài),字符s表示停放在停車位上,/字符p表示停放在便道上,每輛車的初始狀態(tài)用字符i來進行表示2、由于車位是一個狹長的通道,所以不允許兩輛車同時出入停車位,當有車到來要進入停車位的時候也要順次停放,當某輛車要離開時,比它后到的車要先暫時離開停車位,而且越后到的車就越先離開停車位,顯然這和棧的“后進先出”特點相吻合,所以可以使用一個棧來描述停車位。由于停車位只能停放有限的幾輛車,而且為了便于停車場的管理,為每個車位要分配一個固定的編號,不妨設(shè)為1、2、3、4、5(可利用數(shù)組的下標),分別表示停車位的1車位、2車位、3車位、4車位。5車位,針對這種情況使用一個順序棧比較方便。 當某輛車要離開停車場的時候,比它后進停車位的車要為它讓路,而且當它開走之后讓路的車還要按照原來的停放次序再次進入停車位的某個車位上,為了完成這項功能,再定義一個輔助棧,停車位中讓路的車依次“壓入”輔助棧,待提出開走請求的車開走后再從輔助棧的棧頂依次“彈出”到停車位中。對輔助棧也采用順序棧。該棧的具體定義如下:typedef struct CAR carmax_stopping;int top;stack;3、當停車場的停車位上都已經(jīng)停滿了汽車,又有新的汽車到來時要把它調(diào)度到便道上,便道上的車輛要按照進入便道的先后順序順次存放在便道上,為便道上的每個位置也分配一個固定的編號,當有車從停車位上離開后,便道上的第一輛汽車就立即進入停車位上的某個車位,由于問題描述中限制了便道上的汽車不能從便道上開走,即便道上的汽車只有在停車位上停放過之后才能離開停車場,這樣越早進入便道的汽車就越早進入停車位,而且每次進入停車位的汽車都是處于便道“最前面”的汽車,顯然,這和隊列的先進先出特點相吻合,所以,這里使用一個順序隊來描述便道,可以利用數(shù)組的下標表示便道的位置,具體定義如下:#define max_pavement 100 /*便道不限制停放車輛的數(shù)目,設(shè)為足夠大*/typedef structCAR pavement max_pavement; /各汽車信息的存儲空間int front,rear; /用來指示隊頭和隊尾位置的靜態(tài)指針PAVEMENT;三、【功能(函數(shù))設(shè)計】1、本程序從總體上分為四個大的功能模塊:分別為:程序功能介紹和操作提示模塊、汽車進入停車場車位的管理模塊、汽車離開停車場車位的管理模塊、查看停車位以及整個停車場停車狀態(tài)的查詢模塊,具體功能描述如下:1)程序功能介紹和操作提示模塊:此模塊給出程序歡迎信息,介紹本程序的功能,并給出程序功能所對應(yīng)的鍵盤操作的提示,具體屏幕顯示如下所示: 歡迎使用本程序; 1有車來時; 2有車走時; 3顯示某停車位上的汽車; 4顯示該停車場的停車狀況; 5退出系統(tǒng); 請輸入選擇函數(shù)原型void menu();2)汽車進入停車場車位的管理模塊:此模塊用來登記停車場的汽車的車牌號和對該車的調(diào)度過程并修改該車的狀態(tài),其中調(diào)度過程要以屏幕信息的形式反饋給用戶來指導(dǎo)用戶對車輛的調(diào)度。例如,當前停車位上1、2、3車位分別停放著牌照為JF001、JF002、JF003的汽車,便道上無汽車,當牌照為JF004的汽車到來后屏幕應(yīng)給出如下提示信息: 牌照為JF004的汽車停入停車位的4號車位!此函數(shù)原型為int push_stack(stack&s,CAR&c);當停車位已滿,再來新的車輛應(yīng)提示該汽車停在了便道上,提示信息:牌照為JF006的汽車停在了便道上。此函數(shù)原型為int push_queue(queue&q,CAR&c); 再次顯示菜單讓用戶選擇功能 3)汽車離開停車場停車位的管理模塊:此模塊用來為提出離開停車場的車輛做調(diào)度處理,并修改相關(guān)車輛的狀態(tài),其中調(diào)度過程要以屏幕信息的形式反饋給用戶來指導(dǎo)用戶對車輛的調(diào)度,當有車離開停車場后應(yīng)該立刻檢查便道上是否有車,如果有車的話立即讓便道上的第一輛汽車停入停車位。例如,當前停車位上1,2,3,4,5車位分別停放著牌照為JF001、JF002、JF003、JF004、JF005的汽車,便道上的1,2位置分別停放著牌照為JF006、JF007的汽車,當接收到JF003要離開的信息時,屏幕應(yīng)給出如下提示信息:車牌號為JF005的車由停車位開到了輔助棧上車牌號為JF004的車由停車位開到了輔助棧上車牌號為JF003的車開走了車牌號為JF004的車由輔助棧開到了停車位的3的車位上車牌號為JF005的車由輔助棧開到了停車位的4的車位上便道上的JF006的停在了5車位上函數(shù)原型為int car_leave(stack&s1,stack&s2,queue&q,char*c);再次顯示菜單供用戶選擇功能。4)查看停車場停車狀態(tài)的查詢模塊:此模塊用來在屏幕上顯示停車位和便道上各位置的狀態(tài),例如,當前停車位上1,2,3,4,5車位分別停放著牌照為JF001、JF002、JF004、JF005、JF006的汽車,便道上的1,2位置分別停放著牌照為JF006、JF007的汽車,當接受到查看指令后,屏幕上應(yīng)顯示:JF001-停車位的1車位JF002-停車位的2車位JF003-停車位的3車位JF004-停車位的4車位JF005-停車位的5車位JF006-便道上的1位置JF007-便道上的2位置顯示菜單讓用戶選擇功能。此函數(shù)原型為:void show_parking(stack&s,queue&c);查看某個停車位的停車狀況:在用戶選擇該功能并且輸入4后,應(yīng)顯示:4車位上停著車牌號為JF004的車此函數(shù)原型為void show_stopping(int i,stack&s);顯示菜單讓用戶選擇功能。2、以上四個總體功能模塊要用到的棧和隊列的基本操作所對應(yīng)的主要函數(shù)如下表所示:函數(shù)原型函數(shù)功能void init_stack(stack&c);通過參數(shù)c來選擇初始化“停車位棧”或“輔助?!眝oid init_queue(queue&c);初始化“便道隊列”int push_stack(stack&s,CAR&c);將車輛c壓入停車位棧s中int push_queue(queue&q,CAR&c);將車輛c壓入便道q中void show_parking(stack&s,queue&e);打印停車位s和便道q上的車輛信息void show_stopping(int i,stack&s);打印停車位上的i車位的車輛信息int car_leave(stack&s1,stack&s2,queue&q,char*c);先通過c查找出要開走的車輛在停車位的位置,先將其后方的車輛開到輔助棧中,等該車輛開走后,再把輔助棧中的車輛開回停車位,如便道有車,便把1位置的車開到停車位上其他函數(shù)的定義和說明請參照源代碼。3、由于程序應(yīng)該能夠隨時處理用戶所提出的各種操作請求,所以在主函數(shù)中用一個DO_WHILE循環(huán)結(jié)構(gòu)隨時監(jiān)控鍵盤的按鍵操作,遇到相應(yīng)的按鍵就轉(zhuǎn)到對應(yīng)函數(shù)繼續(xù)運行,運行完該函數(shù)繼續(xù)監(jiān)控鍵盤按鍵,如此往復(fù),直到接到“退出”指令程序才能結(jié)束。部分編碼如下:domenu();cout請輸入選擇key;while(key5|key1)cout輸入有誤,請重新輸入:key;switch(key) case 1: CAR c; cout請輸入該車車牌號:c.license; c.state=i; if(stopping.top!=max_stopping-1) push_stack(stopping,c); else push_queue(pavement,c); break; case 2: char *s; cout請輸入您要出站的汽車的車牌號:s; car_leave(stopping,temp,pavement,s); break; case 3: int location; cout請輸入車位:location; show_stopping(location,stopping); break; case 4: show_parking(stopping,pavement); break; case 5: exit(0); ;while(key!=5);return 1;四、【界面設(shè)計】本程序的界面力求簡潔、友好,每一步需要用戶操作的提示以及每一次用戶操作產(chǎn)生的調(diào)度結(jié)果都以中文的形式顯示在屏幕上,使用戶對要做什么和已經(jīng)做了什么一目了然。文字表述精練,準確。具體設(shè)計可參閱功能設(shè)計中的相關(guān)部分,這里就不再贅述。五、【編碼實現(xiàn)】#include#includestring.h#define max_stopping 5 /車庫容量,可以根據(jù)實際情況改變#define max_pavement 100#include typedef structchar*license; /汽車牌照號碼,定義為一個字符指針類型char state; /汽車當前狀態(tài),字符S表示停放在停車位上, /字符p表示停放在便道上,每輛車的初始狀態(tài)用字符i來表示CAR;typedef struct CAR carmax_stopping; /各汽車信息的存儲空間int top; /用來指示棧頂位置的靜態(tài)指針stack;typedef structCAR carmax_pavement; /各汽車信息的存儲空間int front,rear; /用來指示隊頭和隊尾位置的靜態(tài)指針 queue;/*方法聲明*/void init_stack(stack&c); /初始化棧void init_queue(queue&c); /初始化便道int push_stack(stack&s,CAR&c);int push_queue(queue&q,CAR&c);void show_parking(stack&s,queue&c);void show_stopping(int i,stack&s);int car_leave(stack&s1,stack&s2,queue&q,char*c); /車輛離開void init_stack(stack&c)for(int i=0;imax_stopping;i+)c.cari.license=NULL;c.cari.state=i;c.top=-1;void init_queue(queue&c)for(int i=0;imax_pavement;i+)c.cari.license=NULL;c.cari.state=i;c.front=c.rear=-1;int push_stack(stack&s,CAR&c)if(s.top!=max_stopping)s.top+;s.cars.top.license=new charstrlen(c.license)+1;strcpy(s.cars.top.license,c.license);cout車牌號為c.license的車進入停車位的s.top+1車位上endl;s.cars.top.state=s;return 1;else return 0;int push_queue(queue&q,CAR&c) if(q.rear!=max_pavement)q.rear+;q.carq.rear.license=new charstrlen(c.license)+1; strcpy(q.carq.rear.license,c.license); q.carq.rear.state=q;cout車牌號為c.license的車進入便道endl;return 1;return 0;void show_parking(stack&s,queue&q)int i;if(s.top=-1)cout停車場上沒有車endl;return ;for( i=0;i=s.top;i+)couts.cari.license-停車位的i+1車位endl;if(q.front=q.rear)cout便道上沒有車endl;return ; for(i=q.front+1;i=q.rear;i+)coutq.cari.license-便道上的i+1位置max_stopping|i1)cout此停車場上沒有該車位endl;return; if(s.cari-1.license=NULL) cout該車位沒有汽車endl; else couti車位上停著車牌號為s.cari-1.license的車endl;int car_leave(stack&s1,stack&s2,queue&q,char*c)int location;for(int i=0;is1.top)cout停車位上沒有該車location)s2.top+;s2.cars2.top.license=new charstrlen(s1.cars1.top.license)+1;strcpy(s2.cars2.top.license,s1.cars1.top.license); s1.cars1.top.license=NULL;cout車牌號為s2.cars2.top.license的車由停車位開到了輔助棧上endl; s1.top-;cout車牌號為s1.carlocation.license的車開走了=0)s1.top+;s1.cars1.top.license=new charstrlen(s2.cars2.top.license)+1;strcpy(s1.cars1.top.license,s2.cars2.top.license);cout車牌號為s1.cars1.top.license的車由輔助棧開到了停車位的s1.top+1的車位上endl; s2.cars2.top.license=NULL;s2.top-;if(q.front!=q.rear)q.front+;s1.top+;s1.cars1.top.license=new charstrlen(q.carq.front.license)+1;strcpy(s1.cars1.top.license,q.carq.front.license);q.carq.front.license=NULL;cout便道上的s1.cars1.top.license的停在了max_stopping車位上endl;return 1;void menu()cout 歡迎使用本程序 endl; cout 1車輛到達; endl;cout 2車輛離開; endl;cout 3顯示某停車位上的汽車; endl;cout 4顯示該停車場的停車狀況;endl;cout 5退出程序; endl;int main()int key;stack stopping,temp;queue pavement;init_stack(stopping);init_stack(temp);init_queue(pavement); domenu();cout請輸入選擇key;while(key5|key1)cout輸入有誤,請重新輸入:key;switch(key) case 1: CAR c; cout請輸入該車車牌號:c.license; c.state=i; if(stopping.top!=max_stopping-1) push_stack(stopping,c); else push_queue(paveme

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論