資料結構筆記之佇列

2021-09-25 04:57:24 字數 1342 閱讀 5683

佇列是只允許在一端進行插入(隊尾),而在另一端進行刪除(隊首)的線性表。

先進入佇列的元素必然先離開佇列.即先進先出(fifo)

順序佇列:

#define maxsize 50   //佇列中元素最大個數

typedef struct sqqueue;

迴圈佇列有乙個明顯的缺點就是假溢位,即佇列仍然有空間,但是由於隊首不允許插入,導致無法繼續插入資料。使用迴圈佇列就可以解決這個問題。

迴圈佇列:

入隊:rear=(rear+1)%maxsize

出隊:front=(front+1)%maxsize

我們把front=rear僅作為隊空的判定條件。當佇列滿的時候,令陣列中仍然保留乙個空餘單元。我們認為這種情況就是佇列滿了。

佇列滿時的等量關係:

(rear+1)%maxsize==front;

佇列中元素個數:

(rear-front+maxsize)%maxsize

1.迴圈佇列的入隊操作:

bool enqueue(sqqueue &q,elemtype x)
2.迴圈佇列的出隊操作:

bool dequeue(sqqueue &q,elemtype &x)
鏈式佇列

鏈式佇列實際上是乙個同時帶有隊頭指標和隊尾指標的單鏈表。頭指標指向隊頭節點,尾指標指向隊尾結點(即單鏈表的最後乙個結點)。

鏈式佇列的定義:

typedef structlinknode;

typedef structlinkqueue;

1.鏈式佇列的入隊操作

void enqueue(linkqueue &q,elemtype x)
2.鏈式佇列的出隊操作

bool dequeue(linkqueue &q,elemtype &x)
雙端佇列:

雙端佇列是指允許兩端都可以進行入隊和出隊操作的佇列,其元素的邏輯結構仍是線性結構。將佇列的兩端分別稱為前端和後端,兩端都可以入隊和出隊。

棧的應用:

1.括號匹配

演算法思想:若是左括號,入棧;若是右括號,出棧乙個左括號並判斷是否與之匹配;檢驗到字串尾,還要檢查棧是否為空。只有棧空,整個字串才是括號匹配的。

bool check(char *str)
2)求斐波那契數列的第n項

int fib(int n)

資料結構筆記 佇列

佇列 queue 是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。佇列是一種先進先出的線性表。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。如下圖所示 線性表有順序儲存和鏈式儲存,棧是線性表,所以有這兩種儲存方式。同樣,佇列作為一種特殊的線性表,也同樣存在這兩種儲存方式。佇列順序儲存的...

資料結構 佇列筆記

有序列表,可以用陣列或者鍊錶來實現 特點 先進先出 eg 銀行排號 陣列模擬佇列演算法 實現 public class arrayqueuedemo case a case g catch exception e break case h catch exception e break case e...

資料結構之佇列

八 佇列 鏈式佇列 鍊錶實現 隊尾 rear 隊首 front 靜態佇列 陣列實現 必須是迴圈佇列 需要幾個引數來確定,各引數含義 1 佇列初始化 front和rear值都是0 2 佇列非空 front代表佇列第乙個元素 rear代表佇列最後乙個元素的 下乙個元素 3 佇列空 front和rear相...