没有专门看过有关栈的资料,今天做了两个题目,看题解的时候发现了这个神奇的东西。
stack
就是一个储存空间的意思,然后特殊点的就是,在存储数据的时候每一次只能将数据放在最上面,而且在取出的时候也是只能够在最上面取出,这就符合一些特殊题目的特殊情形,例如下面这个:
我是觉得用数组做这个题目也是可以的,但是我将代码打上去之后,全部的显示都是RE,我一脸懵逼。
然后去题解区看了一下,发现了stack的一个代码:
#include<bits/stdc++.h>
#include<stack>
using namespace std;
stack<int> s;
int main()
{
int n;
cin>>n;
while(n!=1)
{
s.push(n);
if(n%2==0)
{
n/=2;
}
else
{
n=n*3+1;
}
}
s.push(1);
while(!s.empty())
{
cout<<s.top()<<" ";
s.pop();
}
return 0;
}
题目中出现的计算和输出的要求就符合这个stack的用法。
- 定义:stack s,和vector的定义类似;
- 输入:s.push(n)就是输入,输入到最上面的一层;
- s.top()是stack栈里面最上层的数据,
- s.pop()是删除最上面的数据,
- s.empty()是栈里面的数据全部为空的情况。