隊列跟棧非常相似,支持的操作也很有限,最基本的操作也是兩個:入隊 enqueue(),放一個數據到隊列尾部;出隊 dequeue(),從隊列頭部取一個元素。
image.png
用數組實現的叫順序隊列,用鏈表實現的叫鏈式隊列。特別是長得像一個環的循環隊列。在數組實現隊列的時候,會有數據搬移操作,要想解決數據搬移的問題,我們就需要像環一樣的循環隊列。
循環隊列
隊空判斷條件:head === tail 表示隊列為空
隊滿判斷條件:(tail+1)%n=head (當隊列滿時,圖中的 tail 指向的位置實際上是沒有存儲數據的。所以,循環隊列會浪費一個數組的存儲空間)
image.png
幾種高級的隊列結構
- 阻塞隊列:入隊、出隊操作可以阻塞
- 并發隊列:隊列的操作多線程安全