4-5 佇列資料結構
4-5-1 陣列佇列結構 佇列(Queue)在資訊系統裡時常用到,是屬於排列順序裝置,順序是『先進先出』(First-In-First-Out, FIFO),表示先來的先出去的意思。圖 4-16 是Queue 的儲存結構,它有 Front(前端)與 Rear(後端) 兩個口,Front 是資料的出口;Rear 是資料的入口,也就是資料由 Rear 進入,由 Front 出去。
圖 4-16 Queue 的運作程序 各種資料結構(如鏈路、樹狀、、等等)都可以用來實現佇列功能,但我們還是用最簡單的陣列來實現它。圖 4-17 是陣列佇列結構圖,我們取用一個陣列(假設空間為 50),佇列出口(Front)固定在陣列 0 位置(queue[0]),佇列入口(Rear)採用游標方式,指示目前佇列可儲存的空閒位置。當資料插入佇列時,則存入 Rear 所指位置,並且將 Rear 內容加一,並判斷是否超載(大於 50)。如果由 Front 取出資料時,則所有資料往前移一位,到 Rear 所指位置為止,並將其內容減一。
圖 4-17 陣列實現 Queue 結構 4-5-2 範例研討:醫院掛號系統 (A) 系統功能:Ex4_6.java 甄美麗美容中心需要一套掛號系統,功能是記錄客戶掛號的先後順序,功能如下: (1) 具有顯示目前掛號客戶順序、登錄客戶掛號之功能,選單如下:
(2) 當選擇登錄客戶掛號(選擇 2),如下:
(3) 選擇顯示目前掛號客戶名單(選擇 1),如下:
(B) 系統分析 我們需建立一個 Queue 陣列來存放客戶掛號順序,Queue 是要儲存客戶名單,因此需要宣告程字串(String) 資料型態。 (C) 程式範例 圖 4-18 為其程式架構,其中 Queue[]、Front與Rear 等 3 個類別變數是佇列的主要裝置,再利用 4 個方法來實現系統功能。
圖 4-18 Ex4_6 程式架構
4-5-3 自我挑戰:醫生看診系統 (A) 系統功能:PM4_4.java 甄美麗美容中心除了客戶掛號功能外,還需要醫生看診系統,請您擴充 Ex4_6.java系統的功能,使其具有醫生看診順序的功能。基本上,醫生看診是依照客人先來先看(Queue 功能)。當醫生選擇一位客戶時,則由掛號系統刪除該客戶排隊,其他客戶往前移一位,功能如下: (1) 具有顯示目前掛號客戶順序、登錄客戶掛號之功能,選單如下:
(2) 當選擇登錄客戶掛號,並顯示已掛號客戶(選擇 2與 1),如下:
(3) 選擇醫生看診客戶姓名並觀察客戶掛號名單(選擇 3 與 1),如下:
(B) 系統分析 醫生叫診是依照先進先出的規則,每叫一個客戶則表示由 Queue 內刪除一個元素,因此,僅依照 Ex4_6 擴充刪除佇列元素的功能即可。 (C) 程式提示 圖 4-19 為其程式架構,增加了 emptyQueue() 與 deQueue() 兩個方法,前者是測試 Queue 是否已空閒,表示有沒有掛號中的客戶;後者是醫生叫號後,刪除前面的客戶。
圖 4-19 PM4_4 程式架構 程式提示如下:
|
翻轉工作室:粘添壽
Java 程式設計(二) 含物件導向
翻轉電子書系列:
|