佇列作為線性表的另乙個資料結構,只允許在表的前端進行刪除操作,而在表的後端進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。
先來看下用法:
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...