我们知道c++标准模板库中栈和队列很重要,是考试的重点内容,今天和我一起来学习栈容器的使用吧
特点:先进后出,后进先出(餐馆的盘子)
C++中有专门的栈容器stack
常用
Push(S,x);//入栈
POp(S,x);//出栈
GetTop(S);//取出栈顶元素
栈中元素可以按需要随时出栈,大家需要记住的是栈只能在最后插入(入栈),也只能删除每次最后入栈的那个元素(出栈),这是栈最重要的特点。
top()
pop()
empty()
size()
经典题
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
void convert(int N)
{
int S[20],e;
int top=-1;
while(N!=0)
{
top++;
S[top]=N%8;
N=N/8;
}
while(top!=-1)
{
e=S[top];
top--;
printf("%d ",e);
}
}
int main()
{
int n,ans;
cin>>n;
convert(n);
return 0;
}
经典题必会
基本的栈操作,用了3个栈来实现,但很容易!注意多组输入!
Bessie 和 Canmuu 将联手洗掉N (1<= N <= 10,000) 个脏盘子。 Bessie 洗; Canmuu 来擦干它们. 每个盘子有一个指定的编号,范围1..N. 开始,所有盘子按顺序排列在栈中,1号盘子在顶端,N号盘子在底端. Bessie 会先洗一些盘子,然后放在洗过的盘子栈里(这样原来的顺序颠倒). 然后,或者她洗别的盘子,或者Canmuu 擦干她已经洗好的部分或全部盘子,放在擦干的盘子栈里。 这样直到所有盘子洗完擦干后放置的顺序是什么?Input
第一行: 一个整数N,表示盘子的数量 以下若干行: 每一行两个整数 ,第一整数为1表示洗盘子,为2表示擦盘子,第二个整数表示数量Output
共N行:擦干后盘子从顶端到底端的顺序Sample Input
5 1 3 2 2 1 2 2 3Sample Output
1 4 5 2 3
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
stack<int >v1,v2,v3;
int main()
{
int i,n,x,y;
cin>>n;
for(i=n;i>=1;i--)
v1.push(i);
while(cin>>x>>y)
{
if(x==1)
for(i=1;i<=y;i++)
{
v2.push(v1.top());
v1.pop();
}
if(x==2)
for(i=1;i<=y;i++)
{
v3.push(v2.top());
v2.pop();
}
}
while(!v3.empty())
{
cout<<v3.top()<<endl;
v3.pop();
}
return 0;
}