一:概念
今天给大家讲讲关于栈的知识,前面曾经在文章里讲过!接下来详细讲讲!
首先,我们可以了解一下栈,其实栈就像一个大桶,可以往里面添加元素,如图所示
当然,除了可以在里面存储数,也可以添加字符等等,详细讲讲怎样使用!
二:使用
首先讲讲怎样进行创建一个栈!
挺简单滴,就像
stack<int>stk;
创建叫做“stk”的数类型变量!
在stack《类型》 名称;
这样定义!
三:各种使用方式
1.push(x):往栈顶压入一个元素x,无返回值,只是放入
2.pop():从栈顶弹出一个元素,栈空时无效,无返回值
3.empty():判断栈是否为空,为空返回true,不为空时返回false,可以放入if中
4.top():返回栈顶元素,栈空时无效
5.size():返回栈内元素数量
四:深入
其实,数组可以和栈互换,用下图了解下关系吧!
好了,做到题目吧!
题目描述:
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 操作的查询结果为一个整数,表示栈顶元素的值。
样例输入:
10
push 5
query
push 6
pop
query
pop
empty
push 4
query
empty
样例输出:
5
5
YES
4
NO
提示:
1≤M≤100000,
0≤x≤109
所有操作保证合法。
时间限制: 1000ms
空间限制: 256MB
看看题解!
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int stk[N], tt;
string cmd;
int main() {
int n;
cin >> n;
while (n--) {
cin >> cmd;
if (cmd == "push") {
int x;
cin >> x;
stk[++tt] = x;
} else if (cmd == "pop")
tt--;
else if (cmd == "query")
printf("%d\n", stk[tt]);
else if (cmd == "empty") {
if (tt == 0) printf("YES\n");
else printf("NO\n");
}
}
return 0;
}
非常简单,但是可以用数组解决,如果你有数组解法,欢迎在评论区输入代码,一起学习!