1. 程式人生 > >資料結構實踐專案——佇列

資料結構實踐專案——佇列

7.佇列的定義
8. 順序隊的儲存及基本操作
9. 環形佇列的儲存及基本操作
10. 佇列的鏈式儲存結構及其基本運算的實現
11. 佇列的應用-迷宮問題
12. 雙端佇列

【專案1 - 建立順序環形佇列演算法庫】
  定義順序環形佇列儲存結構,實現其基本運算,並完成測試。
要求:
  1、標頭檔案sqqueue.h中定義資料結構並宣告用於完成基本運算的函式。對應基本運算的函式包括:

void InitQueue(SqQueue *&q);  //初始化順序環形佇列
void DestroyQueue(SqQueue *&q); //銷燬順序環形佇列
bool
QueueEmpty(SqQueue *q); //判斷順序環形佇列是否為空 int QueueLength(SqQueue *q); //返回佇列中元素個數,也稱佇列長度 bool enQueue(SqQueue *&q,ElemType e); //進隊 bool deQueue(SqQueue *&q,ElemType &e); //出隊

  2、在sqqueue.cpp中實現這些函式
  3、在main函式中完成測試,包括如下內容:

(1)初始化佇列q
(2)依次進佇列元素a,b,c
(3)判斷佇列是否為空
(4)出隊一個元素
(5)輸出佇列中元素個數
(6)依次進佇列元素d,e,f
(7)輸出佇列中元素個數
(8)將佇列中所有元素刪除,並輸出序列
(9)釋放佇列

[參考解答]

【專案2 - 建立鏈隊演算法庫】
  定義鏈隊儲存結構,實現其基本運算,並完成測試。
  具體要求參照專案1。
[參考解答]

【專案3 - 負數把正數趕出佇列】
  設從鍵盤輸入一整數序列a1,a2,…an,試程式設計實現:當ai>0時,ai進隊,當ai<0時,將隊首元素出隊,當ai=0時,表示輸入結束。要求將佇列處理成環形佇列,使用環形佇列演算法庫中定義的資料型別及演算法,程式中只包括一個函式(main函式),入隊和出隊等操作直接在main函式中呼叫即可。當進隊出隊異常(如隊滿)時,要打印出錯資訊。
[參考解答]

【專案4 - 佇列陣列】
  建立10個佇列,分別編號為0-9(處理為佇列陣列,編號即下標)。輸入若干個正整數,以數字0作為結束。設輸入的值為x,其個位數字的大小為i,則將x插入到編號為i的佇列中。最後輸出所有的非空佇列。
  要求將佇列處理成鏈式佇列,使用鏈式佇列演算法庫中定義的資料型別及演算法,程式中只包括一個函式(main函式),入隊和出隊等操作直接在main函式中呼叫即可。
  設程式執行時輸入:70 59 90 72 67 88 80 64 29 97 18 83 40 13 0
  輸出結果如下圖:這裡寫圖片描述

提示:
指向單個鏈隊的指標如下定義:
LiQueue *qu;
本專案中使用的佇列陣列,實際上需要將十個鏈隊的指標,順序儲存到一個數組中即可,如下定義:
LiQueue *qu[10]; //qu是陣列,陣列中儲存指標,儲存的是指向LiQueue型別的指標

[參考解答]

【專案5 -排隊看病模擬】
編寫一個程式,反映病人到醫院看病,排隊看醫生的情況。在病人排隊過程中,主要重複兩件事:
(1)病人到達診室,將病歷本交給護士,排到等待佇列中候診。
(2)護士從等待佇列中取出下一位病人的病歷,該病人進入診室就診。
要求模擬病人等待就診這一過程。程式採用選單方式,其選項及功能說明如下:
(1)排隊——輸入排隊病人的病歷號,加入到病人排隊佇列中。
(2)就診——病人排隊佇列中最前面的病人就診,並將其從佇列中刪除。
(3)檢視排隊——從隊首到隊尾列出所有的排隊病人的病歷號。
(4)不再排隊,餘下順序就診——從隊首到隊尾列出所有的排隊病人的病歷號,並退出執行。
(5)下班——退出執行,提示未就診的病人明天再來。
執行結果可以如下圖所示:
  這裡寫圖片描述

[參考解答]

【專案6 - 停車場模擬】
  設停車場是一個可停放n輛汽車的狹長死衚衕,南邊封口,汽車只能從北邊進出(這樣的停車場世間少有)。汽車在停車場內按車輛到達時間的先後順序,最先到達的第一輛車停放在車場的最南端,依次向北排開。若車場內已停滿n輛汽車,則後來的汽車只能在門外的候車場上等候,一旦有車開走,則排在候車場上的第一輛車即可開入。當停車場內某輛車要離開時,在它之後進入的車輛必須先退出車場為它讓路(假定停車場內設有供車輛進出的便道,所有的司機也必須在車內隨時待命),待該輛車開出外,其他車輛再按原次序進入車場。每輛停放在車場的車在它離開停車場時,要按停留的時間長短交納費用。試為停車場編制按上述要求進行管理的模擬程式。

  這裡寫圖片描述

提示:
  以棧模擬停車場,以佇列模擬車場外的候車場,有車離開時,供車輛進出的便道也應該用棧表示。按照從鍵盤讀入的輸入資料序列進行模擬管理。汽車到達和離開時,每一組輸入資料包括汽車牌照號碼(設為整數)以及到達或離去的時刻(為簡單化,也設為整數,如1,代表停車場開始營業的第1小時)。對每一組輸入資料進行操作後的輸出資訊為:若是車輛到達,則輸出汽車在停車場內或修車場上的停車位置;若是車輛離去,則輸出汽車在停車場內停留的時間和應交納的費用(在候車場上停留的時間不收費)。棧以順序結構實現,佇列以連結串列結構實現。

[參考解答]