Cpp的佇列(Queue)學習筆記

2021-07-04 08:25:56 字數 2734 閱讀 5675

佇列是一種先入先出(first in first out)的資料結構,它的實現用兩個整型變數(head、tail)和乙個儲存資料的陣列(date[num])來實現的。

自定義的資料結構體:

struct queue;
這裡要注意的是結構體內定義的是型別和變數空間,所以最好不要在結構體內初始化

佇列的操作總共有三種:

一、入列操作:

q.date[tail] = x;

tail++;

二、出列操作:

x = q.date[head];

head++;

三、判斷非空操作:

headstl(queue)

c++語言的stl中自帶了queue的資料結構型別

queue的模板類封裝在標頭檔案中

queue模板類需要兩個引數,乙個是元素型別,乙個是容器型別

(元素型別書必要的,容器型別是可選的,預設為deque型別)

一、佇列物件的定義:

queue< int > q1;

queue< double > q2;

二、佇列物件的操作:

入隊:

q.push(x);   // 將x放入佇列的尾部

出列:

q.pop;      // 彈出佇列的頭部資料

非空判斷:

q.empty();      // 判斷操作的返回值

訪問隊首元素:

q.front();      // 得到返回值

訪問隊尾元素:

q.back();       // 得到返回值

訪問佇列中的元素個數:

q.size();       // 返回元素個數的整型值

三、priority_queue(優先佇列)

的標頭檔案中,除了queue這個模板類之外,還定義了另外乙個模板類priority_queue(優先佇列)

優先佇列和佇列的區別在於優先佇列不是按照隊列入隊的順序出隊,而是按照佇列中元素的優先權順序來出隊(預設為大者優先,也可以通過指定運算元來指定自己的優先順序)。

priority_queue模板類有三個引數:第乙個是元素型別,第二個是容器型別,第三個是比較運算元。其中後兩個引數都可以省略,預設容器為vector,預設運算元為less,即小的往前排,大的往後排(出隊時序列尾的元素出隊)。

定義priority_queue物件:

priority_queue< int > q1;

priority_queue< pair> q2; // 注意在兩個尖括號之間一定要留空格。

priority_queue, greater> q3; // 定義小的先出隊

priority_queue的基本操作和queue基本相同

初學者在使用priority_queue時,最困難的可能就是如何定義比較運算元了。 如果是基本資料型別,或已定義了比較運算子的類,可以直接用stl的less運算元和greater運算元——預設為使用less運算元,即小的往前排,大的先出隊。 如果要定義自己的比較運算元,方法有多種,這裡介紹其中的一種:過載比較運算子。優先隊 列試圖將兩個元素x 和y 代入比較運算子(對less運算元,呼叫xy), 若結果為真,則x 排在y 前面,y 將先於x 出隊,反之,則將y 排在x 前面,x 將先出隊。 看下面這個簡單的示例:

#include #include using namespace std;

class t

};bool operator < (const t &t1, const t &t2)

main()

return 1;

}

輸出結果為(注意是按照z 的順序從大到小出隊的):

3 3 6

2 2 5

1 5 4

4 4 3

再看乙個按照z 的順序從小到大出隊的例子:

#include #include using namespace std;

class t

};bool operator > (const t &t1, const t &t2)

main()

return 1;

}

輸出結果為:

4 4 3

1 5 4

2 2 5

3 3 6

如果我們把第乙個例子中的比較運算子過載為:

bool operator < (const t &t1, const t &t2)

則第乙個例子的程式會得到和第二個例子的程式相同的輸出結果。

STL學習筆記之佇列queue

只能訪問queue容器介面卡的第乙個和最後乙個元素。只能在容器的末尾新增新元素,只能從頭部移除元素。fifo 先進先出 1.初始化 需要標頭檔案 queueque 2.成員函式 c 佇列queue類成員函式如下 back 返回最後乙個元素 empty 如果佇列空則返回真 front 返回第乙個元素 ...

c x學習筆記之佇列Queue用法

c 中queue的用法 queue佇列就是先進先出。它並沒有實現 ilist,icollection。所以它不能按索引訪問元素,不能使用add和remove。下面是 queue的一些方法和屬性 enqueue 在佇列的末端新增元素 dequeue 在佇列的頭部讀取和刪除乙個元素,注意,這裡讀取元素的...

queue的長度 佇列 Queue

佇列 queue 是先進先出 fifo,first in first out 的線性表。在具體應用中通常用鍊錶或者陣列來實現。佇列只允許在後端 稱為rear 進行插入操作,在前端 稱為front 進行刪除操作。隊結構 迴圈佇列可以更簡單防止偽溢位 假溢位 的發生,但佇列大小是固定的。防止假溢位,如d...