像棧一樣,佇列(queue)也是表。然而,使用佇列時插入是在一端進行的,而刪除則是在另一端進行的。
佇列的基本操作是 enqueue(入隊),它是在表的末端(稱為隊尾)插入乙個元素;dequeue(出隊),它是刪除(並返回)表的開頭(叫作隊頭)的元素。
對於每乙個佇列資料結構,我們保留乙個陣列 theray以及位置 front和back,它們代表佇列的兩端。我們還要記錄實際存在於佇列中的元素的個數 currentsize。
操作應該是清楚的。要 enqueue元素x,可將 currentsize和back增1,然後置thearray[back]=x。要 dequeue乙個元素,可以置返回值為 thearray[front],將 currentsize減1,再將front增1。其他的方法也可以使用(將在後面討論)。現在論述錯誤的檢測。
這種實現存在乙個潛在的問題。經過10次 enqueue後,佇列似乎是滿了,因為back現在是陣列的最後乙個下標,而下一次執行 enqueue就會是個不存在的位置。然而,佇列中也許只存在幾個元素,因為若干元素可能已經出隊了。像棧一樣,即使在有許多操作的情況下佇列也常常不是很大。
簡單的解決方法是,只要fron或back到達陣列的尾端,就繞回到開頭。下列圖顯示了在某些操作期間的佇列情況。這稱為迴圈陣列(circular array)實現
實現迴繞所需要的附加**是極小的(雖然它可能使得執行時間加倍)。如果 front或back增1使得它超越了陣列,那麼其值就要重置為陣列的第乙個位置。
3.7.3佇列的應用
事實上每乙個實際生活中的排隊都(應該)是乙個佇列。例如,在售票口排列的隊是佇列,因為服務的順序是先到的先買票
另乙個例子是關於計算機網路的。有許多種pc機的網路設定,其中磁碟是放在臺叫作檔案伺服器(file server)的機器上的。使用其他計算機的使用者是按照先到先使用的原則訪問檔案的,因此其資料結構是乙個佇列
正如棧一樣,佇列還有其他豐富的用途
小結本章描述了一些adt的概念,並且利用三種最常見的抽象資料型別聞述了這個概念。主要目的就是將抽象資料型別的具體實現與它們的功能分開。程式必須知道操作都做些什麼,但是如果不知道如何去做就更好
在所有的電腦科學中,表、棧和佇列或許都是三個基本的資料結構,大量的例子證明了它們廣泛的用途。特別地,我們看到棧是如何用來記錄函式呼叫以及是如何真實地實現遞迴的。這對於理解是非常重要的,其原因不只是它使得過程語言成為可能,而且還因為知道遞迴的實現而揭開了圍繞其使用的神秘面紗。雖然遞迴非常強大,但是它並不是完全隨意的操作;遞迴的誤用和亂用可能導致程式崩潰。
資料結構與演算法分析 棧與佇列
以下是對資料結構中的棧和佇列的一些總結 一 棧 棧 stack 是一種特殊的線性表,有後進先出 last in first out,lifo 的性質,且只能從線性表的一段進行插入和刪除元素等操作。棧的常用操作有 進棧 出棧 取棧頂 將棧置空 判斷棧是否為空 判斷棧是否已滿等等。由於棧也屬於線性表,因...
20200708演算法與資料結構筆記 佇列
上週的面試有點慘烈 接著好好學習大資料跟演算法吧 演算法與資料結構 2 線性結構 1 線性結構作為最常用的資料結構,其特點是資料元素之間存在一對一的線性關係 2 線性結構有兩種不同的儲存結構,即順序儲存結構 陣列 和鏈式儲存結構 鍊錶 順序儲存的線性表稱為順序表,順序表中的儲存元素是連續的 3 鏈式...
資料結構與演算法 佇列
學習了好長 一段時間的資料結構,由於時間關係一直沒有寫部落格。這次打算將這段時間的學習內容寫下來做個整理。佇列作為線性結構的一種,其實用性不用多說。這裡總結下兩種結構的佇列實現。迴圈佇列 先列下以順序表結構形成的普通順序佇列存在的問題 隊頭不斷刪除元素,將使佇列的頭部空出單元 隨著刪除 插入的進行,...