## 隊列的具體應用:
?所有和事件有關的操作都有隊列的影子。
(例如操作系統認為先進來的先處理)
## 定義:
一種可是實現“先進先出”的存儲結構
## 分類:
鏈式隊列:用鏈表實現
?
靜態隊列:用數組實現
靜態隊列通常都必須是循環隊列,為了減少內存浪費。

## 循環隊列 :
### 1、靜態隊列為什么必須是循環隊列
如果用傳統意義的數組實現隊列,無論入隊還是出隊,rear和front指針只能+不能-;
比 F元素下標小的的數組元素下標就浪費了。
###循環隊列怎么用呢?

當出現這種情況時,如果仍然需要插入元素,那么f指向下一個位置,即5,r指向下一個位置即0.如圖:

那么,我們在插入一個元素“國”,然后再刪除中呢?

這就是所謂的循環隊列。
### 2、??? 循環隊列需要幾個參數來確定 及其含義
需要2個參數來確定
front
rear
?
### 3、 循環隊列各個參數的含義
2個參數不同場合不同的含義????
建議初學者先記住,然后慢慢體會
1)隊列初始化
front和rear的值都是零,初始化時隊列就是空的。
2)隊列非空
front代表隊列的第一個元素
rear代表了最后一個有效元素的下一個元素
3)隊列空
front和rear的值相等,但是不一定是零
### 4、循環隊列入隊偽算法講解
需要判斷r是否指向數組最后一個元素。
兩步完成:
1)將值存入r所代表的位置
2)將r后移,正確寫法是rear = (rear+1)%數組長度
錯誤寫法:rear=rear+1;
?
### 5、 循環隊列出隊偽算法講解
?front = (front+1)% 數組長度
### 6、 如何判斷循環隊列是否為空
如果front與rear的值相等,
則隊列一定為空
### 7、 如何判斷循環隊列是否已滿

上圖這種情況,如果再插入f,r指向同一個元素。如果這樣的話就不能判斷隊列是空還是滿。
所以為了判斷循環隊列是否已滿,有一下兩種方式:
1、多增加一個表標識的參數
2、少用一個隊列中的元素(才一個,不影響的)
如果r和f緊挨著(r的下一個位置是f),則隊列已滿
用C語言描述:
If((r+1)%數組長度)==f
? 隊列已滿
Else
? 隊列不滿