佇列我們都知道,是一種先進後出的資料結構。
佇列的基本操作
而優先佇列是把佇列內部的資料,按照一定的優先順序排序後,再輸出。
值得注意的是,優先佇列沒有front和back,只有top一種輸出方式,這一點很像棧。
棧的基本操作
優先佇列可以通過過載運算子的方法自定義優先順序。
基本操作
priority_queueq;//建立int型別的優先佇列q,當然也可以是結構體型別
q.empty() //隊列為空則返回真,非空返回假
q.pop() // 刪除佇列的第乙個元素
q.push() //新增乙個元素
q.size() //返回佇列中的元素數量
q.top() //返回佇列中優先順序最高的乙個元素 12
3456
預設情況下,佇列內元素大的優先順序高,會先出佇列。
通過過載操作符可以自定義優先順序
struct node};1
2345
6789
10通過對《的過載,實現佇列內按照time的大小公升序排列,此時time小的優先順序高,優先順序高的會先出佇列。
不要過載》,因為標準庫是預設使用《來確定它們之間的優先順序。
當然,也可以模仿sort函式中的cmp函式,寫出多級排序,效果都是一樣的。
原文:
//sort
排序的演算法有很多,氣泡排序,插入排序,選擇排序,快速排序等等。
冒泡可能是很多人接觸的第一種排序演算法。
先講講為什麼用sort排序而不用冒泡。
原因很簡單,氣泡排序時間複雜度為o(n^2),而sort作為qsort快速排序的改進版,時間複雜度僅為o( n*log2(n) )
用這個函式要先加標頭檔案
#includeusing namespace std;12
這個好像是c++裡的函式,所以標頭檔案跟c有點不一樣。
首先sort函式預設是公升序排列
#includeusing namespace std;
int main()
;//假設陣列a有5個資料
sort(a,a+5);//實現公升序排列}1
2345
67如果想降序排列的話
#includeusing namespace std;
int cmp(int x,int y)
int main()
;//假設陣列a有5個資料
sort(a,a+5,cmp);//實現降序排列}1
2345
6789
1011
然而,由於記不住sort預設是降序還是公升序,所以即便是公升序排列,我也寫出cmp函式
#includeusing namespace std;
int cmp(int x,int y)
{ return x#includeusing namespace std;12
3棧的標頭檔案
#include1
定義乙個棧
stacks;
1stack是定義棧的關鍵字,括號內是棧要儲存的資料型別,最後是棧名,可以和陣列名做模擬理解。
棧的基本操作
s.empty()//棧為空就返回true,否則返回false
s.size()//返回棧內元素的個數
s.push()//壓棧
s.pop()//出棧
s.top()//返回棧頂元素12
345壓棧就是將資料輸入到棧內,由於棧的先進後出,所以新壓入的資料一定是在棧頂。
例如,s.push(a); 那麼a就被壓入了棧s,並且在棧頂的位置。
出棧就是刪除棧頂的元素,注意出棧並不會返回棧頂元素,它僅僅只是刪掉棧頂
優先佇列講解
程式大意就是在這個優先佇列裡依次插入10 8 12 14 6,再輸出。結果是什麼呢?14 12 10 8 6 也就是說,它是按從大到小排序的!include includeusing namespace std priority queue q int main 程式大意就是插入 10,100 12...
STL 棧,佇列,優先佇列
stl 棧 include includeusing namespace std struct node int main stackroot struct node x,y x.value 3 y.value 4 root.push x root.push y while root.empty r...
C STL 棧 佇列 優先佇列
棧 後進先出 last in first out lifo 標頭檔案 stack stack stack int s 棧的基本操作 s.empty 如果棧為空返回true,否則返回false s.size 返回棧中元素的個數 s.pop 刪除棧頂元素但不返回其值 s.top 返回棧頂的元素,但不刪除...