棧是滿足一定約束的線性資料結構,約束是:只允許在棧的一端插入或刪除元素,這一端被稱為棧頂,另一端稱為棧底。
向棧中壓入元素,稱為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,...