

下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、專業(yè)資料 華北水利水電學(xué)院 數(shù)據(jù)結(jié)構(gòu) 實驗報告 一、 實驗?zāi)康模?1. 掌握棧的特點(先進(jìn)后出 FILO)及基本操作,如入棧、出棧等,棧的順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu), 以便在實際問題背景下靈活應(yīng)用。 2“掌握隊列的特點(先進(jìn)先出 FIFO)及基本操作,如入隊、出隊等,隊列順序存儲結(jié)構(gòu)、鏈?zhǔn)酱鎯Y(jié)構(gòu) 和循環(huán)隊列的實現(xiàn),以便在實際問題背景下靈活運用。 二、 實驗內(nèi)容: 1 .鏈棧的建立、入棧、出棧操作。 2“環(huán)形隊列的建立、入隊、出隊操作。 3. 停車場管理。設(shè)停車場內(nèi)只有一個可停放 n輛汽車的狹長通道,且只有一個大門可供汽車進(jìn)出。 汽 車在停車場內(nèi)按車輛到達(dá)時間的先后順序,依次由北向南排列(大門
2、在最南端,最先到達(dá)的第一輛 車停放在車場的最北端),若車場內(nèi)已停滿 n輛汽車,則后來的汽車只能在門外的便道上等候,一旦 有車開走,則排在便道上的第一輛車即可開入; 當(dāng)停車場內(nèi)某輛車要離開時, 在它之后開入的車輛 必須先退出車場為它讓路,待該輛車開出大門外,其它車輛再按原次序進(jìn)入車場,每輛停放在車場 的車在它離開停車場時必須按它停留的時間長短交納費用。試為停車場編制按上述要求進(jìn)行管理的 模擬程序。 實現(xiàn)提示:以棧模擬停車場,以隊列模擬車場外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進(jìn)行模 擬管理。每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車到達(dá)或離去信息、汽車牌照號碼及到達(dá)或離 去的時刻,對每一組輸入數(shù)據(jù)進(jìn)行操
3、作后的輸出數(shù)據(jù)為:若是車輛到達(dá),則輸出汽車在停車場內(nèi)或便 道上的停車位置;若是車離去;則輸出汽車在停車場內(nèi)停留的時間和應(yīng)交納的費用(在便道上停留的 時間不收費)。棧以順序結(jié)構(gòu)實現(xiàn),隊列以鏈表(帶頭結(jié)點)實現(xiàn)。 需另設(shè)一個棧,臨時停放為給要離去的汽車讓路而從停車場退出來的汽車,也用順序存儲結(jié)構(gòu)實 現(xiàn)。輸入數(shù)據(jù)按到達(dá)或離去的時刻有序。棧中每個元素表示一輛汽車,包含兩個數(shù)據(jù)項:汽車的牌照 號碼和進(jìn)入停車場的時刻。 設(shè) n=2,輸入數(shù)據(jù)為:( A,1 ,5),( A,2, 10),( D, 1,15), ( A,3, 20), ( A, 4, 25 ), ( A, 5, 30), ( D, 2 , 3
4、5), ( D, 4, 40) , ( E,0, 0)。每一組輸入數(shù)據(jù) 包括三個數(shù)據(jù)項:汽車到達(dá)或離去信息、汽車牌照號碼及到達(dá)或離去的時刻,其中, 表示到達(dá); D表示離去, E表示輸入結(jié)束。 三、 實驗要求: 1. C/ C+完成算法設(shè)計和程序設(shè)計并上機調(diào)試通過。 2. 撰寫實驗報告,提供實驗結(jié)果和數(shù)據(jù)。 3. 寫出算法設(shè)計小結(jié)和心得。 四、 程序源代碼: 1.#i nclude 20112012 學(xué)年 第二學(xué)期 2011 級 計算機 專業(yè) 班級: 學(xué)號: * 姓名: 實驗二 棧和隊列及其應(yīng)用 專業(yè)資料 #in clude typedef struct stnode int data; stn
5、ode *next; LinkStack; / 創(chuàng)建一個棧頭結(jié)點,無頭結(jié) void InitStack(LinkStack *&ls) ls=NULL; / 進(jìn)棧,相當(dāng)于頭插法 void Push(LinkStack *&ls,int x) LinkStack *p; p=(LinkStack *)malloc(sizeof(LinkStack); p-data=x; p-next=NULL; p-next=ls; ls=p; / 出棧 void Pop(LinkStack *&ls) if(ls=NULL) return; LinkStack *p; int x; p=ls; while(p
6、) x=p-data; ls=p-next; coutx ; free(p); p=ls; cout 出棧成功 !endl; / 創(chuàng)建棧 void CreatStack(LinkStack *&ls) InitStack(ls); int i=1,num; cout 以 000 表示輸入結(jié)束 !endl; while(1) cout 請輸入第 inum; if(num=000) break; Push(ls,num); i+; cout 進(jìn)棧成功! endl; void main() 專業(yè)資料 LinkStack *ls,*p; CreatStack(ls); Pop(ls); 2. #inc
7、lude #define QueueSize 100 typedef struct sqqueue int dataQueueSize; int front,rear; SqQueue; / 初始化隊列 void InitQueue(SqQueue &qu) qu.rear=qu.front=0; / 進(jìn)隊 int EnQueue(SqQueue &sq,int x) if(sq.rear+1)%QueueSize=sq.front) return 0; sq.rear=(sq.rear+1)%QueueSize; sq.datasq.rear=x; return 1; / 出隊 void D
8、eQueue(SqQueue &sq) int x; if(sq.front=sq.rear) return; while(sq.front!=sq.rear) sq.front=(sq.front+1)%QueueSize; x=sq.datasq.front; coutx ; cout 出隊成功 !endl; / 創(chuàng)建隊 void CreatQueue(SqQueue &sq) InitQueue(sq); int num,i=1; cout 以 000 表示輸入結(jié)束! ! endl; while(1) cout 請輸入第 inum; if(num=000) break; EnQueue(
9、sq,num); i+; cout 進(jìn)隊成功! endl; void main() SqQueue sq; CreatQueue(sq); DeQueue(sq); 3. #include #include #include #define MAX 2 #define price 0.05 typedef struct node 專業(yè)資料 int hour; int min; Time;/ 時間結(jié)點 typedef struct Node char num10;/ 車牌號 Time reach;/ 時間 Time leave; CarNode;/ 車輛信息結(jié)點 專業(yè)資料 typedef str
10、uct NODE CarNode *stackMAX; int top; CarStack;/ 順序棧模擬車站 typedef struct QNode/ 隊列 CarNode *data; QNode *next; QueueNode;/ 鏈隊結(jié)點類型 typedef struct pqrt QueueNode *front,*rear;/ 設(shè)置頭指針尾指針 LinkQueueCar;/ 模擬通道 / 初始化棧 void InitStack(CarStack *cs); / 初始化隊列 (便道 ) int InitQueue(LinkQueueCar *qc); / 車輛到達(dá) int Arr
11、ival(CarStack *Enter,LinkQueueCar *qc); / 車輛離開 void Leave(CarStack *Enter,CarStack *Temp,LinkQueueCar *qc); / 顯示車庫信息 void List(CarStack s,LinkQueueCar w); void main() CarStack Enter,Temp; LinkQueueCar Wait; int ch; InitStack(&Enter); InitStack(&Temp); InitQueue(&Wait); while(1) cout 歡迎光臨 endl; cout
12、endl; cout1. 車輛到達(dá) endl; cout2. 車輛離開 endl; cout3. 車場顯示 endl; cout4. 退出程序 endl; cout - endl; cout 請選擇所需的服務(wù) !ch; if(ch=1&chtop=-1;/ 初始化棧 for(int i=0;istackcs-top=NULL; int InitQueue(LinkQueueCar *qc)/ 初始化隊列 /qc=(LinkQueueCar *)malloc(sizeof(LinkQueueCar); 這句話不能要 qc-front=(QueueNode *)malloc(sizeof(Queu
13、eNode); if(qc-front!=NULL) qc-front-next=NULL;/ 帶頭結(jié)點的 qc-rear=qc-front;/ 一定要注意賦值順序不能反了 ! return 1; else return -1; / 打印車站車離開的信息 void Print(CarNode *p,int room) int A1,A2,B1,B2;/ 車輛收費 cout 請輸入離開時間 :/*:*/endl; coutp-leave.hour; while(p-leave.hourreach.hour|p-leave.hour23)couterror!p-leave.hour; B1=p-l
14、eave.hour; coutp-leave.min; while(p-leave.minleave.min59) couterror!p-leave.min; B2=p-leave.min; coutendl 離開汽車的車牌號為: num); cout 其到達(dá)時間為 :reach.hour:reach.minendl; cout 其離開時間為 :leave.hour:leave.minreach.hour; A2=p-reach.min; cout 應(yīng)交費用為 :(B1-A1)*60+(B2-A2)*price 元 endl; free(p); int Arrival(CarStack *E
15、nter,LinkQueueCar *qc) CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); ? 專業(yè)資料 cout 請輸入車牌號 ( 例 A8888):num); if(Enter-top+1)top+; cout 車輛在車場第 top 位置 endl; cout 請輸入到達(dá)時間 :/*:*/endl; coutp-reach.hour; while(p-reach.hourreach.hour23) couterror!p-reach.hour; coutp-reach.min; Enter-stackEnter
16、-top=p;/ 注意數(shù)組下標(biāo)是從 0 開始,在顯示時下標(biāo)也要與之對應(yīng) cout 車近停車場成功 !endl; return 1; else cout 該車需在便道上等待 !data=p; t-next=NULL; qc-rear-next=t; qc-rear=t; cout 車進(jìn)便道成功 !top-1)/ 判斷車場是否為空 while(1) coutroom; if(room=0&roomtop) break; / 要離開的車后面還有車,則后面的車需進(jìn)入臨時棧給前面的車讓路 while(Enter-toproom)/ 用 Enter-top 和 room 相比看你的車在第幾個位置,前面的幾
17、輛車 需全部讓路 Temp-top+; Temp-stackTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; / 讓路完以后車再離開 p=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; 專業(yè)資料 / 車離開后,如果臨時棧里有車,重新進(jìn)車站 while(Temp-top=0) Enter-top+; Enter-stackEnter-top=Temp-stackTemp-top; Temp-stackTemp-top=NULL; Te
18、mp-top-; cout 臨時車場里的車重新進(jìn)站成功 !front!=qc-rear&Enter-topfront-next; t=q-data; Enter-top+; cout 便道上的 num 號車進(jìn)入車場第 top 位置 endl; cout 請輸入現(xiàn)在的時間 :/*:*/endl; coutt-reach.hour; while(t-reach.hourreach.hour23) couterror!t-reach.hour; coutt-reach.min; qc-front-next=q-next;/ 出便道 if(q=qc-rear) qc-front=qc-rear; En
19、ter-stackEnter-top=t;/ 進(jìn)車站 free(q); cout 便道的車進(jìn)入停車場成功 !endl; else cout 便道里沒有車 !endl; else cout 車場里沒有車 !top-1) cout 車場 endl; cout 位置 時間 車牌號 endl; for(i=0;itop+1);i+) cout i stacki-reach.hour:stacki-reach.min stacki-numendl; else cout 車場里沒有車 !front-next;/p 先指向第一輛車, if(w-front!=w-rear)/ 判斷便道是否為空 專業(yè)資料 co
20、ut 等待車輛的號碼為 :data-num); p=p-next; else cout 便道里沒有車 !endl; void List(CarStack s,LinkQueueCar w)/ 顯示整個停車場的信息 int flag,tag; flag=1; while(flag) cout 請選擇 1|2|3:endl; cout1. 車場 2. 便道 3. 返回 tag; if(tag=1|tag=3) break; else cout 請選擇 1|2|3: 5 5 - -P P. . . 3 3 6 6 7 7 8 8 匚 S S Z Z W W5 5S S *兀兀元一匹兀一 1 12 2
21、3 34 4 5 51 1- - 訂f f- -g gf f- -g g B BTPTP*71*71T7T7- -K K 芬.葺參蘇鮮晉TiTi“ 時J E戯聶結(jié)即.亭車亦Q w bu gl亭車遞.亡w 達(dá)開番 到離fi程 I I H H A A Z2359一 壬 一 I (- 丄豆BBL - 第一 場達(dá)達(dá)達(dá)場 一 在入入入 W, 一 3 迎 一 H 車請請 mH? 一 H 專業(yè)資料 譚選擇所需的服務(wù) 1 請輸入車牌號(例朋蹈時: 歡迎光臨 到達(dá) 罔開 請選擇所需的服務(wù), 半二達(dá)開一律 到離顯程 is H “ “ 1 2 ? 4 I .E;牌左蜻構(gòu)萍車場D曲u旅亭車場達(dá)達(dá)達(dá)場 番入入入玄 車請
22、請 專業(yè)資料 *青選擇所需的服務(wù)! 鬻輸入車牌號例朋唏那: S5i 該 :2!3: 氛便道3 “返回 11時間車牌號 0 5-& 1 ? = 0 情選S1I2I3: 車達(dá)開一岸 到離顯程 fxs fxs 一 1 2 3 41 2 3 4 A8S88 次迎光臨 E :做專業(yè)資料 逝2 .便道3.0 需待車輛的號碼為: 請選擇11213 = 專業(yè)資料 妒中的位買 豐重新迸站咸功 I i: z*=*z :6 0-59? 六、 小結(jié)(包括收獲、心得體會、存在的問題及解決問題的方法、建議等) 本次實驗前兩題是棧和隊列的基本算法,是基礎(chǔ)練習(xí),關(guān)鍵是第三題,具體談?wù)勎?理解的停車場。 停車場系統(tǒng)總的來說分為五大塊,第一塊和第二塊屬于基本操作,包括初始化棧和 隊列;第三塊是車到達(dá),分為兩個層次:1.車到達(dá)了進(jìn)棧 2.棧滿,進(jìn)隊列。第四塊是車 離開,分為五個層次:1.車離開,判斷該車后面是否還有車 2有車的話,后面的車讓路, 進(jìn)臨時棧3.然后該車離開,打印出離開信息 4.離開后,判斷臨時棧上是否有車,有車重 新進(jìn)車站 5.再判斷便道上是否有車,有車也進(jìn)車站。第五塊是顯示車站信息,分為三個 層次:1.顯示車站信息 2.顯示便道信息 3.
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年一級建造師經(jīng)濟章節(jié)題庫及答案
- 山東省棗莊達(dá)標(biāo)名校2025屆初三下學(xué)期5月階段性教學(xué)質(zhì)量檢測試題英語試題試卷含答案
- 電子科技大學(xué)中山學(xué)院《臨床醫(yī)學(xué)概論Ⅱ》2023-2024學(xué)年第一學(xué)期期末試卷
- 內(nèi)蒙古體育職業(yè)學(xué)院《鋼琴與即興伴奏二》2023-2024學(xué)年第二學(xué)期期末試卷
- 佛山科學(xué)技術(shù)學(xué)院《矢量圖設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 寧波幼兒師范高等專科學(xué)?!禕IM建筑工程計量與計價》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東商業(yè)職業(yè)技術(shù)學(xué)院《基礎(chǔ)俄語(1)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東交通職業(yè)技術(shù)學(xué)院《中國現(xiàn)代文學(xué)作家解讀》2023-2024學(xué)年第一學(xué)期期末試卷
- 長治職業(yè)技術(shù)學(xué)院《電磁場與天線B》2023-2024學(xué)年第二學(xué)期期末試卷
- 益陽醫(yī)學(xué)高等??茖W(xué)?!稒C械系統(tǒng)設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024年新人教版四年級數(shù)學(xué)下冊《第6單元第2課時 小數(shù)加減法》教學(xué)課件
- 國開2024年《數(shù)據(jù)庫運維》形考1-3
- 勞動合同(模版)4篇
- 少兒美術(shù)課件國家寶藏系列《鴟吻》
- 鹽城射陽農(nóng)村商業(yè)銀行招聘真題
- 藥物研發(fā)監(jiān)管的國際協(xié)調(diào)
- 2023年寧夏地區(qū)中考滿分作文《學(xué)習(xí)可以收獲生活》
- 直播電商策劃與運營 課件 項目1 認(rèn)識直播電商、項目2 主播人設(shè)打造與能力塑造
- 生豬屠宰獸醫(yī)衛(wèi)生檢驗人員理論考試題及答案
- 四川省2024年全國高中數(shù)學(xué)聯(lián)賽(預(yù)賽)試題(解析版)
- 中國郵政招聘筆試題庫
評論
0/150
提交評論