C 資料結構 佇列

2021-10-25 01:22:29 字數 3235 閱讀 1120

佇列作為線性表的另乙個資料結構,只允許在表的前端進行刪除操作,而在表的後端進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。

先來看下用法:

queue queue =

newqueue()

; queue.

enqueue(1

);queue.

enqueue(2

);queue.

enqueue(3

);queue.

enqueue(4

);foreach

(var r in queue) ")

;}console.

writeline()

; console.

writeline

($"peek:");

queue.

dequeue()

; queue.

enqueue(5

);queue.

enqueue(6

);console.

writeline()

;

列印結果:

/// 佇列第乙個節點

///

public

int head

///

/// 對列最後乙個節點

///

public

int tail

///

/// 佇列長度

///

public

int size

///

/// 增長因子 100 == 1.0

///

public

int growfactor

///

/// 最小增加量

///

private

const

int minimumgrow =4;

private

const

int _shrinkthreshold =32;

///

/// 初始化

///

public

myqueue()

:this(32

,(float

)2.0

)///

//////

/// 佇列長度

/// 增長因子

public

myqueue

(int capacity,

float _growfactor)

///

/// 在佇列尾處新增節點

///

///

public

virtual

void

enqueue

(object obj)

setcapacity

(newcapacity);}

content[tail]

= obj;

tail =

(tail +1)

% content.length;

size++;}

///

/// 在佇列頭部出棧

///

///

public

virtual

object

dequeue()

public

virtual

object

peek()

///

/// 擴充套件佇列

///

///

private

void

setcapacity

(int capacity)

else

} content = newarray;

head =0;

tail =

(size == capacity)?0

: size;

}public

void

showall()

,data: ");

} console.

writeline

("——————————————————————");

}}測試:

myqueue queue =

newmyqueue()

; queue.

enqueue(1

);queue.

enqueue(2

);queue.

enqueue(3

);queue.

enqueue(4

);queue.

showall()

; console.

writeline

($"peek:");

queue.

dequeue()

; queue.

enqueue(5

);queue.

enqueue(6

);queue.

showall()

; console.

readline()

;

實現方式:

通過object物件陣列,儲存佇列中的節點資料,另外定義兩個指標分別指向佇列的頭部節點以及尾部節點。

enqueue入隊時,(如果佇列長度達到陣列最大長度,則通過擴充套件陣列(佇列長度 * 增長因子)來增加陣列長度)通過在對尾附加節點來實現的。

dequeue出隊時,通過頭指標後移實現出佇列。

另外未實現地方,為節省記憶體空間,陣列**隊後的空間也要加入到後續入隊時用到的閒置位置。

以上方法都是以虛方法的方式實現的,便於後續重寫(例如執行緒安全佇列)。

列印結果:

資料結構 c 佇列

佇列是先進先出 fifo 的線性表,元素從隊尾進從隊頭出,有的時候也是比較常用的,同樣分為順序儲存結構和鏈式儲存結構,其中順序儲存結構可以實現迴圈佇列。首先同樣先定義結構體,同樣佇列應包含有隊頭指標和隊尾指標,分別指向頭結點和隊尾結點,而指向的結點需有資料域和指向下個結點的指標域 include i...

C 資料結構 佇列

佇列是一種特殊線性的資料結構,也是一種運算受限制的線性表,跟棧恰好相反運算規則先進先出。插入元素叫做入隊或者進隊,插入的一方叫做隊尾 刪除元素叫做出隊,刪除的一端叫做隊首。順序表佇列 class sqqueueclass 非迴圈佇列 region 判斷佇列是否為空 public bool queue...

C資料結構 佇列

leetcode102題,二叉樹的層次遍歷 leetcode199題,二叉樹的右檢視 佇列的思路如下 1 有head tail 2 入隊靠tail,出隊靠head 3 如果每輪需要出隊,那麼把tail head存下來,做乙個for迴圈!非常重要 define maxlen 1000 intenque...