stack
stack是一种先进后出(First In Last Out,FILO)的数据结构。它只有一个出口,stack允许新增元素,移除元素,取得最顶端元素,但是除了最顶端外,没有任何其他方法可以存取stack的其他元素,换而言之,stack不允许有遍历行为。
将元素推入stack的操作称为push,将元素推出stack的操作称为pop.
以某种既有容器作为底部结构,将其接口改变,使之符合“先进后出”的特性,形成一个stack,是很容易做到的。deque是双向开口的数据结构,若以deque为底部结构并封闭其头端开口,便轻而易举地形成了一个stack.以deque作为缺省情况下的stack底部结构,stack的实现很简单。
由于stack系以底部容器完成其所有工作,而具有这种“修改某物接口,形成另一种风貌”之性质者,成为(配接器,适配器)adapter,因此SLT stack 往往不被归类为container(容器),而被归类为container adapter。
stack所有元素的进出都必须符合“先进后出”的条件,只有stack顶端的元素,才有机会被外界取用。stack不提供走访功能,也不提供迭代器。
除了deque之外,list也是双向开口的数据结构。因为若以list底部结构并封闭其头端开口,一样能够轻易形成一个stack。
stack::empty()函数 功能:栈为空则返回真
stack::pop()函数 功能:移除栈顶元素
stack::push()函数 功能:在栈顶添加元素
stack::size()函数 功能:返回栈中元素数目
stack::top()函数 功能:返回栈顶元素
#include<iostream>
#include<stack>
using namespace std;
int main(){
//stack::empty()函数 功能:栈为空则返回真
//stack::pop()函数 功能:移除栈顶元素
//stack::push()函数 功能:在栈顶添加元素
//stack::size()函数 功能:返回栈中元素数目
//stack::top()函数 功能:返回栈顶元素
stack<int>mystack;
int sum(0);
for(int i=0;i<11;i++){
mystack.push(i);
}
cout<<"mystack size:"<<mystack.size()<<endl;
cout<<"mystack.top() is now :"<<mystack.top()<<endl;
while(!mystack.empty()){
sum+=mystack.top();
mystack.pop();
}
cout<<"total:"<<sum<<endl;
// stack::stack()函数 功能: 构造stack
}
运行结果
mystack size:11
mystack.top() is now :10
total:55
参考文献:《The Annotated STL Sources》侯捷