優先佇列 sort 棧 佇列講解

2021-09-02 16:31:56 字數 1894 閱讀 6317

佇列我們都知道,是一種先進後出的資料結構。 

佇列的基本操作 

而優先佇列是把佇列內部的資料,按照一定的優先順序排序後,再輸出。 

值得注意的是,優先佇列沒有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 返回棧頂的元素,但不刪除...