佇列的定義及模擬實現

2022-01-14 06:21:08 字數 1809 閱讀 4997

佇列是一種特殊的線性表

,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列的資料元素又稱為佇列元素。在佇列中插入乙個佇列元素稱為入隊,從佇列中刪除乙個佇列元素稱為出隊。因為佇列只允許在一端插入,在另一端刪除,所以只有最早進入佇列的元素才能最先從佇列中刪除,故佇列又稱為先進先出的線性表

線性表:(linear list)是資料結構的一種,乙個線性表是n個具有相同特性的資料元素的有限序列。

佇列又分為兩種,分別是順序佇列和迴圈佇列

建立順序佇列結構必須為其靜態分配或動態申請一片連續的儲存空間,並設定兩個指標進行管理。乙個是隊頭指標front,它指向隊頭元素;另乙個是隊尾指標rear,它指向下乙個入隊元素的儲存位置,如圖所示,

每次在隊尾插入乙個元素是,rear增1;每次在隊頭刪除乙個元素時,front增1。隨著插入和刪除操作的進行,佇列元素的個數不斷變化,佇列所佔的儲存空間也在為佇列結構所分配的連續空間中移動。當front=rear時,佇列中沒有任何元素,稱為空佇列。當rear增加到指向分配的連續空間之外時,佇列無法再插入新元素,但這時往往還有大量可用空間未被占用,這些空間是已經出隊的佇列元素曾經占用過得儲存單元。

實現(陣列)

function

arrayqueue()

//出隊操作

this.pop = function

()

//獲取隊首

this.getfront = function

()

//獲取隊尾

this.getrear = function

()

//清空佇列

this.clear = function

()

//獲取隊長

this.size = function

()

}

其操作表現基於 fifo(先進先出)原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為「環形緩衝器」。

在實際使用佇列時,為了使佇列空間能重複使用,往往對佇列的使用方法稍加改進:無論插入或刪除,一旦rear指標增1或front指標增1 時超出了所分配的佇列空間,就讓它指向這片連續空間的起始位置。自己真從maxsize-1增1變到0,可用取餘運算rear%maxsize和front%maxsize來實現。這實際上是把佇列空間想象成乙個環形空間,環形空間中的儲存單元迴圈使用,用這種方法管理的佇列也就稱為迴圈佇列。除了一些簡單應用之外,真正實用的佇列是迴圈佇列。 [2]

在迴圈佇列中,當隊列為空時,有front=rear,而當所有佇列空間全佔滿時,也有front=rear。為了區別這兩種情況,規定迴圈佇列最多只能有maxsize-1個佇列元素,當迴圈佇列中只剩下乙個空儲存單元時,佇列就已經滿了。因此,佇列判空的條件時front=rear,而佇列判滿的條件時front=(rear+1)%maxsize。隊空和隊滿的情況如圖:

實現(es6)

class mycircularqueue 

enqueue(value)

dequeue()

front()

rear()

isempty()

isfull()

}

棧和佇列的模擬實現

ifndef stack h define stack h include include include typedef int stdatatype typedef struct stack stack void stackinit stack ps 初始化 void stackdestory ...

佇列的模擬實現 c語言

test.c define crt secure no warnings 1 include queues.h intmain queues.c include queues.h include include include include include typedef struct mycir...

C 棧和佇列的模擬實現

棧 stack 是限定僅在表尾進行插入和刪除操作的線性表 我們把允許插入和刪除的一端稱為棧頂 top 另一端稱為棧底 bottom 不含任何資料原色的棧稱為空棧。棧又稱為後進先出 last in first out 的線性表,簡稱lifo結構。實現 template class stack stac...