题目展示区
题目描述:
实现一个栈, 栈初始为空, 支持四种操作:
1. push x —— 向栈顶插入一个数 x
2. pop —— 从栈顶弹出一个数
3.empty —— 判断栈是否为空
4.query —— 查询栈顶元素
输入格式:
第一行包含整数 M, 表示操作次数, 接下来的 M 行, 每行包含一个操作命令, 操作命
令为 "push x", "pop", "empty", "query" 中的一种
输出格式:
对于每个 "empty" 和 "query" 操作都要输出一个查询结果,每个结果占一行
其中, "empty" 操作的查询结果为 "YES" 或 "NO", "query" 操作的查询结果为一个整数
表示栈顶元素的值
数据范围:
1 ≤ M ≤ 100000, 1 ≤ x ≤ (所有操作都合法)
输入样例:
9
push 5
query
push 6
pop
pop
empty
push 4
query
empty
输出样例:
5
YES
4
NO
概念介绍区
栈:
就像是一根管子,并且这根管子只有一端开口,所以物品只能从一端进,也只能从一端
出, 这样 栈 就有了 “后进先出, 先进后出”的特点, 画了个图
题目分析区
解题大纲:
我们可以通过开一个一维数组 stk 来模拟 “栈” 这个数据结构,并且设置一个 指针 top,
指示现在的栈顶元素是谁,初始时, 栈 中没有任何元素,我们可以令 top 的值为 0
解题概要:
往栈顶插入一个数:
首先先让 top 自增,然后再将对应的 x 插到 栈顶
从栈顶弹出一个数:
直接让 top 指针减一就好了,因为是模拟的数据结构,此处释放空间是不必要的
判断栈是否为空:
初始时,栈中没有任何元素,top 的值为 0, 我们可以通过判断 top 的值是否为 0
来判断 栈 是否为 空
查询栈顶元素:
top 指针指向的就是 栈顶 ,所以如果查询栈顶元素,直接输出 stk[top] 就行了
样例模拟区
画图展示:
代码展示区
#include <iostream>
using namespace std;
const int N = 100010;
int n;
int stk[N];
int top;
string s;
int main(){
cin >> n;
for (int i = 1; i <= n; i ++){
cin >> s;
if (s == "push"){
int x;
cin >> x;
stk[ ++ top] = x;
}else if (s == "pop"){
top --;
}else if (s == "query"){
cout << stk[top] << endl;
}else {
if (top == 0) cout << "YES" << endl;
else cout << "NO" << endl;
}
}
return 0;
}
其他学习网站推荐
www.acwing.com www.bilibili.com