佇列的陣列實現與鍊錶實現

2021-07-13 05:49:17 字數 1855 閱讀 8693

佇列是一種基本的資料結構。我們平時排隊等候服務的時候,是先到的人先接受服務。對於佇列這種資料結構,實現的就是一種先進先出(first-int, first-out, fifo)的策略。

改變佇列中元素的操作方法只有兩個——push與pop。push是把元素從隊尾插入,pop是把元素從隊頭刪除。

佇列的陣列實現有兩種形式,一種是線性實現,另一種是迴圈實現。

線性實現有一定的侷限性,當rear抵達max-1的時候就不能再讓元素入隊了。此時front前面的空間將被浪費,因為沒有被使用。

來自《data structures and program design in c++》

著重說說迴圈實現。

迴圈實現就是把乙個陣列看成乙個迴圈的圓,當rear或front抵達max - 1的時候,再前進,將回到0處。這樣一來,就能對陣列的空間有充分的利用。

來自《data structures and program design in c++》

陣列實現佇列最大的問題在於,如何判斷其邊界,下面給出邊界情況

來自《data structures and program design in c++》

在實現的時候,需要區分如何判斷佇列已滿或者佇列已空。

當rear的下乙個位置是front的時候,則佇列已滿。

當rear和front的位置重疊,則佇列已空。

這樣就能避免圖中出現的邊界情況,難以判斷滿或空。

template class queue 

public:

queue() : head(0), rear(0), queuesize(0)

// 下面所以求餘都是為了讓rear和front的範圍限定在[0, 10]

void push(const t &val)

}  void pop()

}  t front() const

t back() const

bool empty() const

int size() const

};

鍊錶實現利用兩個結點,head記錄煉表頭即隊頭,rear記錄鍊錶尾即隊尾

來自《data structures and program design in c++》

template class queue ;

private:

node *head;

node *rear;

int queuesize;

public:

queue() : head(null), rear(null), queuesize(0)

~queue()

void push(const t &val) else

++queuesize;

} void pop()

} t front() const

t back() const

bool empty() const

int size() const

};

《data structures and program design in c++》

佇列 鍊錶與迴圈陣列實現

如圖所示 根據圖可以知道 空的判斷條件 front 與 rear 都指向頭結點 實現 如下 struct node struct queuerecord typedef struct node ptrtonode typedef struct queuerecord queue struct nod...

佇列(陣列實現和鍊錶實現)

1.概念 具有一定操作約束的線性表 2.特點 1 只能在一端插入 入隊 另一端刪除 出隊 2 先進先出。3.儲存實現方式 陣列 鍊錶。4.基本操作 1.陣列實現 迴圈陣列 注意 1 普通的順序儲存的陣列用來實現佇列時,存在乙個問題 當rear 記錄隊尾的變數 到達maxsize 1時,不能確定佇列是...

佇列 佇列的陣列實現及鍊錶實現

stack 模板類的定義在標頭檔案中 include queueq q.push x 將x 接到佇列的末端。q.pop 彈出佇列的第乙個元素,注意,並不會返回被彈出元素的值。q.front 訪問最早被壓入佇列的元素,並不會彈出該元素。q.back 訪問最後被壓入佇列的元素,並不會 彈出該元素。q.e...