目录
一:栈的介绍
栈是一种数据结构,主要特点是先进后出,就是说先进来的元素会被后面进来的元素压在底下,只有等上面的元素都出去了,自己才可以出去。下面有一幅示意图:(虽然画得不好)
如图,如果4不出栈,那么后面的三个元素都不能出栈,根据推理,可以得出入栈顺序为1,2,3,4,最先进去的1如果上面还有数据压着,就出不来了,所以是先进后出。
二:栈的函数讲解
1:栈的定义
首先是stack,他和int差不多,只不过一个表示定义栈,一个表示定义整数。后面跟上一对<>,中间写这个栈的类型,例如:<int>,最后跟上栈的名字,如:s。下面是定义栈的示例
stack<int>s;//表示定义一个类型为int名字为s的栈
2:栈的插入
插入的函数是push,例如插入3:
s.push(3)
注:插入都是从栈顶插入的。
3:站的顶部元素
顶部元素是top,例如输出栈顶元素:
cout<<s.top();
注:用这个函数是,栈不能为空,否则,自己去试试吧……
4:栈的弹出
弹出的函数是pop,且弹出的是顶部元素,示例:
s.pop();
注:和top一样,要先确保栈不为空。
5:是否为空
函数为empty,为空则返回1,反之返回0,示例:
if(s.empty()){
cout<<"栈为空";
}
else{
cout<<"栈不为空";
}
三:例题和代码
1:题目
2016: 【入门】栈(模板题)
时间限制 : 1.000 sec 内存限制 : 128 MB
题目描述
实现一个栈,栈初始为空,支持四种操作:
- push x – 向栈顶插入一个数 xx;
- pop – 从栈顶弹出一个数;
- empty – 判断栈是否为空;
- query – 查询栈顶元素。
现在要对栈进行 MM 个操作,其中的每个操作 33 和操作 44 都要输出相应的结果。
输入
第一行包含整数 MM,表示操作次数。
接下来 MM 行,每行包含一个操作命令,操作命令为 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,
1≤x≤10^9
所有操作保证合法。
2:代码
#include <bits/stdc++.h>
using namespace std;
stack<int>s;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
string t;
cin>>t;
if(t=="push"){
int n;
cin>>n;
s.push(n);
}
else
if(t=="empty")
{
if(s.empty())
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
else
if(t=="pop")
s.pop();
else
cout<<s.top()<<endl;
}
return 0;
}