栈模板

模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

/// tt表示栈顶
int stk[N], tt = 0;

// 向栈顶插入一个数
stk[ ++ tt] = x;

// 从栈顶弹出一个数
tt -- ;

// 栈顶的值
stk[tt];

// 判断栈是否为空
if (tt > 0)
{

}




题目描述:

实现一个栈,栈初始为空,支持四种操作:

  • 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≤100000,
1≤x≤10^9
所有操作保证合法。

输入样例:

10
push 5
query
push 6
pop
query
pop
empty
push 4
query
empty

输出样例:

5
5
YES
4
NO


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<iostream>

using namespace std;

const int N = 100010;

int m;
int stk[N], tt;

int main(){
cin >> m;
while(m--){
string op;
int x;

cin >> op;
if(op == "push"){
cin >> x;
stk[++ tt] = x;
}
else if(op == "pop") tt--;
else if(op == "empty") cout << (tt ? "NO" : "YES") <<endl;
else cout << stk[tt] << endl;
}

return 0;
}




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<stdio.h>
#include<string.h>
#define N 100010

int m;
int stk[N], tt;

int main (){
scanf("%d",&m);
while(m--){
char op[6];
int x;

scanf("%s",op);
if(!strcmp(op,"push")){
scanf("%d",&x);
stk[++tt] = x;
}
else if (!strcmp(op, "pop")) tt--;
else if (!strcmp(op, "empty")) printf("%s\n",(tt ? "NO" : "YES"));
else printf("%d\n", stk[tt]);
}

return 0;
}