棧 —— 模板題 acwing 828. 模擬棧
實現乙個棧,棧初始為空,支援四種操作:
(1) 「push x」 – 向棧頂插入乙個數x;
(2) 「pop」 – 從棧頂彈出乙個數;
(3) 「empty」 – 判斷棧是否為空;
(4) 「query」 – 查詢棧頂元素。
現在要對棧進行m個操作,其中的每個操作3和操作4都要輸出相應的結果。
輸入格式
第一行包含整數m,表示操作次數。
接下來m行,每行包含乙個操作命令,操作命令為」push x」,」pop」,」empty」,」query」中的一種。
輸出格式
對於每個」empty」和」query」操作都要輸出乙個查詢結果,每個結果佔一行。
其中,」empty」操作的查詢結果為「yes」或「no」,」query」操作的查詢結果為乙個整數,表示棧頂元素的值。
資料範圍
1≤m≤1000001≤m≤100000,
1≤x≤1091≤x≤109
所有操作保證合法。
輸入樣例:
10
push 5
query
push 6
popquery
popempty
push 4
query
empty
輸出樣例:
5
5yes
4no
#includeusing namespace std;
const int n=100000+10;
int stk[n],tt;
int m;
string op;
int main()
if (op=="pop")
if (op=="empty")
if (s[0]=='e')
if (s[0]=='q') cout<總結:
1. 普通佇列:
// hh 表示隊頭,tt表示隊尾
int q[n], hh = 0, tt = -1;
// 向隊尾插入乙個數
q[ ++ tt] = x;
// 從隊頭彈出乙個數
hh ++ ;
// 取隊頭的值
q[hh];
//取隊尾的值
q[tt];
// 判斷佇列是否為空
if (hh <= tt) //不為空
else 為空
2. 迴圈佇列
// hh 表示隊頭,tt表示隊尾的後乙個位置
int q[n], hh = 0, tt = 0;
// 向隊尾插入乙個數
q[tt ++ ] = x;
if (tt == n) tt = 0;
// 從隊頭彈出乙個數
hh ++ ;
if (hh == n) hh = 0;
// 隊頭的值
q[hh];
// 判斷佇列是否為空
if (hh != tt)
return 0;
}
總結:
常見模型:找出每個數左邊離它最近的比它大/小的數
int tt = 0;
for (int i = 1; i <= n; i ++ )
單調佇列 —— 模板題 acwing 154. 滑動視窗
給定乙個大小為n≤10^6的陣列。
有乙個大小為k的滑動視窗,它從陣列的最左邊移動到最右邊。
您只能在視窗中看到k個數字。
每次滑動視窗向右移動乙個位置。
以下是乙個例子:
該陣列為[1 3 -1 -3 5 3 6 7],k為3。
視窗位置
最小值最大值
[1 3 -1] -3 5 3 6 7-13
1 [3 -1 -3] 5 3 6 7-33
1 3 [-1 -3 5] 3 6 7-35
1 3 -1 [-3 5 3] 6 7-35
1 3 -1 -3 [5 3 6] 736
1 3 -1 -3 5 [3 6 7]37
您的任務是確定滑動視窗位於每個位置時,視窗中的最大值和最小值。
輸入格式
輸入包含兩行。
第一行包含兩個整數n和k,分別代表陣列長度和滑動視窗的長度。
第二行有n個整數,代表陣列的具體數值。
同行資料之間用空格隔開。
輸出格式
輸出包含兩個。
第一行輸出,從左至右,每個位置滑動視窗中的最小值。
第二行輸出,從左至右,每個位置滑動視窗中的最大值。
輸入樣例:
8 3
1 3 -1 -3 5 3 6 7
輸出樣例:
-1 -3 -3 -3 3 3
3 3 5 5 6 7
#include using namespace std;
const int n=1000010;
int a[n],q[n];
int main()
cout<= k-1) printf("%d ",a[q[hh]]);
}cout《常見模型:找出滑動視窗中的最大值/最小值
int hh = 0, tt = -1;
for (int i = 0; i < n; i ++ )
用棧模擬佇列和佇列模擬棧
棧 先進後出 filo 佇列 先進先出 fifo class myqueue 兩棧模擬佇列 def init self self.input self.output 進佇列 defpush self,x 出佇列 defpop self self.peek return self.output.pop...
棧和佇列(模板)
陣列模擬棧 include using namespace std const int n 100010 int stk n tt 插入 stk tt x 彈出 tt 判斷棧是否為空 if tt 0 not empty else is empty 棧頂 stk tt 陣列模擬佇列 include u...
模板線性棧和佇列
實現了棧和佇列的基本操作 棧 ifndef afx xtstack h define afx xtstack h if msc ver 1000 pragma once endif include xtlist.h template class xtstack 以上是標頭檔案 template xt...