例說資料結構&STL(四)——queue

無鞋童鞋發表於2017-07-28

1 白話佇列(queue)
  大家一定聽過這樣一個關於佇列的笑話,“在飯堂排隊打飯,最大的欣慰不是前面的人越來越少,而是後面等的人越來越多”。從這句話我們就能探出佇列資料結構的精髓,它是一種先進先出(First In First Out ,簡稱FIFO)的線性表。只允許在表的尾端進行入隊,而在首端進行出隊。佇列就是這樣一個來源於生活的資料結構。


這裡寫圖片描述

  queue屬於介面卡容器型別,在STL中基於deque或者list物件而建立,它的應用很廣泛,例如二叉樹的層序遍歷,銀行業務系統,訊息佇列等等。
2 STL中queue實戰
 2.1 標頭檔案包含
  STL中queue模板類的呼叫需要包含下面的標頭檔案:

#include<queue>

  我們在使用的時候還需要包含標準庫名稱空間,可以在標頭檔案下宣告using namespace std;。queue包含的介面比較少,像因為它是單向新增,所以只有push()活著pop()操作,沒有push_back()導向性的介面。push()就是指在佇列尾部新增元素,而pop()就是指在佇列首部刪除元素,這是queue先進先出的性質所決定的。
 2.2 變數宣告
  queue與後面要介紹的stack模版非常類似,queue模版也需要定義兩個模版引數,一個是元素型別,一個是容器型別。元素型別是必要的,和前面介紹的一樣,可以是傳統資料型別諸如int,long,float等,或者是類,結構體諸如string等。容器型別是可選的,預設就是前面介紹的deque型別。
  queue的宣告如下:

queue<int> que_fir;

queue<double> que_sed;

 2.3 基本操作

que_fir.push(1); // 放入一個元素1在佇列尾部

que_fir.pop();   // 刪除隊首一個元素

que_fir.back();  // 訪問隊尾元素

que_fir.front(); // 訪問隊首元素

if(!que_fir.empty()); // 判斷佇列是否為空
    que_fir.swap(que_sed); // 完全交換兩個佇列中資料,當然兩個佇列中儲存的必須是一種資料型別

que_fir.size();  // 佇列中元素個數

 2.4 牛刀小試
  之前寫過一個二叉樹層序遍歷的例項,它就是使用了佇列的原理依次按層遍歷輸出整個二叉樹儲存的資料。詳細實現請大家閱讀博文二叉樹的層序遍歷詳細講解(附完整C++程式)
3 小結
  佇列的操作很簡單,常用的方法函式只有這幾個。需要注意的是介面卡型別容器不支援迭代器操作,所以也就沒有類似指標(iterator)操作間接訪問。一般情況下是一邊pop(),然後一邊front()函式遍歷整個佇列。
  以上是個人學習記錄,由於能力和時間有限,如果有錯誤望讀者糾正,謝謝!
  轉載請註明出處:http://blog.csdn.net/FX677588/article/details/76284205

相關文章