棧和佇列的模擬模板

2021-09-29 20:43:58 字數 2801 閱讀 3218

棧 —— 模板題 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...