您的位置:首页 > 编程语言 > C语言/C++

ACM学习历程18——stack堆栈容器

2016-08-26 20:59 387 查看
Stack堆栈容器是一种实现了先进后出的线性表,它的插入和删除操作只能在栈顶实现。前面的博文中已经说过了,容器适配器包括:queue、stack、priority_queue
这些适配器都是包装了vector、list、deque中某个顺序容器的包装器,将一些基础容器转换成自己的容器。值得注意的是,适配器没有提供迭代器,不能同时插入和删除多个元素。使用stack前需要引入<stack>头文件。
(一)stack堆栈容器对象的创建:
stack<类型>
对象:stack<int> s;
(二)stack常用的操作:
empty() 堆栈为空则返回真;
pop() 移除栈顶元素;
push() 在栈顶增加元素;
size() 返回栈中元素数目;
top() 返回栈顶元素。
#include<iostream>
#include<stack>
using namespace std;

int main()
{
stack<int> s;
s.push(1);
s.push(2);
s.push(3);
cout<<"size="<<s.size()<<endl;
while(!s.empty())
{
cout<<s.top()<<" ";
s.pop();
}
cout<<endl;
return 0;
}

(三)stack清空的方法:
while(s.empty()==false)
s.pop();
stack应用:

某城市有一个火车站,有n节车厢从A方向驶入车站,按进站的顺序编号为1~n。现让它们按照某种特定的顺序进入B方向的铁轨并驶出车站。为了重组车厢,你可以借助中转站C。在程序中输入车厢数目和出站的特定顺序,如果可以则输出Yes,否者输出No。

样例输入:
5
1 2 3 4 5
5
5 4 1 2 3
6
6 5 4 3 2 1
样例输出:
Yes
No
Yes
#include<iostream>
#include<fstream>
#include<deque>
#include<stack>

using namespace std;
int main()
{
int n,s,i;
deque<int> inque;
deque<int> outque;
stack<int> sta;
deque<int>::iterator p;

while(cin>>n)
{
inque.clear();
for(i=0;i<n;i++)
{
cin>>s;
//将出站的顺序写到inque中
inque.push_back(s);
}

//原序队列输出
outque.clear();
for(i=1;i<=n;i++)
{
outque.push_back(i);
}
//清空栈
while(!sta.empty())
{
sta.pop();
}

//flag标志,为1时可以正确出站,为0不可以
int flag=1;

while(!inque.empty())
{
if(sta.empty())
{
sta.push(outque.front());
//outque.front();
}
else
{
if(sta.top()==inque.front())
{
sta.pop();
inque.pop_front();
}
else if(sta.top()<inque.front())
{
sta.push(outque.front());
outque.pop_front();
}
else
{
flag=0;
break;
}
}
}
if(flag==1)
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}

}
return 0;
}
括号匹配问题:
#include<iostream>
#include<string>
#include<stack>
using namespace std;

int main()
{
int n;
cin>>n;
while(n--)
{
string s;
cin>>s;

stack<char> S;
S.push('#');

for(int i = 0; i<s.size(); ++i)
{
if(s[i]-S.top()==1 || s[i]-S.top()==2)
{
S.pop();
}
else
S.push(s[i]);
}

if(S.size()==1)
cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ acm STL stack