C 小工修煉之路XVI(棧和佇列,優先順序佇列)

2021-09-29 05:03:25 字數 2809 閱讀 9335

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)

bool

ispoporder

(vector<

int> pushv,vector<

int> popv)}if

(i == pushv.

size()

&&j == popv.

size()

)//出來之後假如 i走到了頭,並且j走到了頭那麼就說明序列是正確的

return

true

;return

false

;}

bool

ispoporder

(vector<

int> pushv, vector<

int> popv)

else

sta.

pop();

outdex++;}

}return

true

;}

逆波蘭表示式求值:

string num2str

(const

int num)

intevalrpn

(vector

& tokens)

else

if(tokens[i]

=="-"

)else

if(tokens[i]

=="*"

)else

if(tokens[i]

=="/")}

else

sta.

push

(tokens[i++])

;}return

atoi

(sta.

top().

c_str());}

最小棧三種解法:前面說過了

給定乙個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。

層序遍歷公升級版

class

solution

vv.push_back

(v);

}return vv;}}

;

給定乙個二叉樹,返回其節點值自底向上的層次遍歷。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷)

類似於上面是

下面是

只需要在最後返回的時候使用reverse()函式即可,就是效率不咋高

reverse

(vv.

begin()

,vv.

end())

;return vv;

priority_queue:優先順序佇列堆:將集合中的資料儲存在陣列中(得到的以可完全二叉樹)

完全二叉樹 != 堆

預設的優先順序佇列式大堆,但是是可以修改的。

函式模板原型:

template

<

classt,

class

container

= vector

,class

compare

= less<

typename container::value_type>

>

class

priority_queue

;可以看到第二個引數是乙個陣列,第三個引數是乙個預設的比較方式是less ,

小於號,也就是說在元素比較的時

候,元素1

< 元素2

,則交換元素,也就是說,大的 在上,小的在下,所以說預設情況下是大堆

要想按照大堆的方式列印的話就必須要,將引數列表中的三個引數全部給出來自定義型別的變數要想存到優先順序佇列裡面的時候必須要,自己過載比較方法。過載< (大堆),過載》(小堆)

c 棧和佇列

c 棧 include using std stack s.empty 如果棧為空返回1,否則返回0 s.size 返回棧中元素的個數 s.pop 刪除棧頂元素但不返回其值 s.top 返回棧頂的元素,但不刪除該元素 s.push 在棧頂壓入新元素 測試例項 include include usin...

c 棧和佇列

使用標準庫的棧和佇列時,先包含相關的標頭檔案 include include 定義棧如下 stackstk 定義佇列如下 queueq 棧提供了如下的操作 cpp view plain copy s.empty 如果棧為空返回 true,否則返回 false s.size 返回棧中元素的個數 s.p...

C 棧和佇列

使用標準庫的棧和佇列時,先包含相關的標頭檔案 include include 定義棧如下 stackstk 定義佇列如下 queueq 棧提供了如下的操作 cpp view plain copy s.empty 如果棧為空返回 true 否則返回 false s.size 返回棧中元素的個數 s.p...