# 隊列
> 先進先出 First In First Out
- 順序隊列
- 鏈隊
### 單隊列
- 順序隊列(數組)
- 鏈式隊列(鏈表)
順序隊列或存在「假溢出」問題,明明數組還有空間,卻無法入隊。
> 為了避免當只有一個元素的時候,隊頭和隊尾重合使處理變得麻煩,所以引入兩個指針,front 指針指向對頭元素,rear 指針指向隊列最后一個元素的下一個位置,這樣當 front 等于 rear 時,此隊列不是還剩一個元素,而是空隊列。——From 《大話數據結構》
### 循環隊列
> 通過模運算方式 Q.rear = (Q.rear + 1) % Q.maxsize 建立循環隊列,解決「假溢出」問題和越界問題
順序隊列中,front 等于 rear 時,隊列為空。但是在循環隊列中,有可能是隊列滿了。
解決方式:
- 增加一個標識flag變量,標識隊列是否滿了
- ( rear + 1) % Q.maxsize = front ,如果相等,說明隊列已滿
### 常用場景
當我們需要按照一定順序處理數據時可以考慮使用隊列。
- 阻塞隊列
- 線程池中的請求/任務隊列
- Linux內核進程隊列
- 播放列表
- 消息隊列
- 等等...