LQ訓練營 C 學習筆記 棧與遞迴

2021-10-04 05:29:26 字數 1879 閱讀 1255

棧是滿足一定約束的線性資料結構,約束是:只允許在棧的一端插入或刪除元素,這一端被稱為棧頂,另一端稱為棧底。

向棧中壓入元素,稱為push;從棧頂彈出元素,稱為pop

棧的重要性質是先進先出:越早進入棧的元素,出來的時間越晚。

通常用top指示棧頂的位置。

#include

using

namespace std;

struct stack

else

}void

pop()}

inttopval()

}};int

main()

return0;

}

標準庫裡面的stack在標頭檔案< stack >裡面

stack< t > s定義乙個儲存t型別資料的棧s。

方法功能

引數型別

返回值型別

push

壓入元素到棧頂

t型別無

pop彈出棧頂元素無無

top返回棧頂元素

無t型別

empty

棧是否為空

無bool型別:false表示不為空,true表示棧為空

size

棧的元素個數

無非負整數(size_t型別)

#include

#include

#include

using

namespace std;

intmain()

stack<

int> s;

int cur =1;

//記錄當前沒有壓入棧中的元素的起始位置

bool f =1;

for(

int i =

0;i < n;i++)if

(s.empty()

|| s.

top(

)!=a[i]

)else}if

(f)else

return0;

}

遞迴就是函式呼叫函式自身,用於解決有重複子問題的問題。

直接遞迴 求 n! ,n!=n*(n-1)!

int

factorial

(int n)

#include

using

namespace std;

long

long

factorial

(int n)

return n *

factorial

(n-1);

}int

main()

#include

#include

using

namespace std;

stack<

int> s[3]

;void

move

(int x,

int y)

void

hanio

(int a,

int b,

int c,

int n)

hanio

(a,c,b,n-1)

;move

(a,c)

;hanio

(b,a,c,n-1)

;}intmain()

hanio(0

,1,2

,n);

while

(!s[2]

.empty()

)return0;

}

LQ訓練營 C 學習筆記 揹包問題

2 多重揹包問題 3 完全揹包問題 當前有n件物品和乙個容積為v的揹包。已知第i件物品的體積是ci,價值是wi。由於每種物品有且僅有一件,因此只能選擇放或不放,我們稱之為01揹包問題。現在你需要選出若干件物品,在它們的重量之和不超過v的條件下,使得價值總和盡可能大。對於01揹包,先確定這個問題的狀態...

LQ訓練營 C 學習筆記 動態規劃入門

1.3 動態規劃的優化原理與無後效性 2 動態規劃問題 2.2 蒜頭君下山問題 2.3 三維的蒜頭君回家問題 動態規劃是程式設計解題的一種重要手段,1951年美國數學家 bellman等人,根據一類多階段問題的特點,把多階段決策問題變成一系列相互聯絡的單階段問題,然後逐個解決。與此同時,他提出這類問...

Python訓練營 task2學習筆記

一 列表 1 定義 列表是有序集合,沒有固定大小,能夠儲存任意數量任意型別的 python 物件,語法為 元素1,元素2,元素n 2 新增元素 list.extend seq 在列表末尾一次性追加另乙個序列中的多個值 用新列表擴充套件原來的列表 3 刪除列表元素 二 元組 1 定義 語法為 元素1,...