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

C++ STL--stack堆栈容器学习笔记

2013-12-31 12:09 405 查看
    堆栈是一个线性表,插入和删除只在表的一段进行,该端称为栈顶,另一端称为栈底。堆栈的元素插入称为入栈,元素的删除称为出栈。由于元素的出与入均在栈顶进行,则堆栈是一个后进先出表,即LIFO(last in first out)。

C++ STL的堆栈泛化是直接通过现有的序列容器来实现的,默认的是使用双端队列deque的数据结构,当然也可以用其他线性表vector和list。

实际上在我们使用的时候,我们只使用堆栈的入栈、出栈、栈顶元素的访问、判断是否为空、获取堆栈的大小等功能。

stack具体应用

创建stack对象

    在使用堆栈前,先利用构造函数进行初始化,创建一个堆栈对象,以便之后进行元素的入栈和出栈等相关操作。

1)stack()

    默认的构造函数,创建一个空的stack对象

    stack<int> s;

2)stack(const stack&)

    复制构造函数,用一个stack堆栈创建一个新的堆栈。

    stack<list,list<int>> s2(s1);

元素入栈

    stack堆栈容器的元素入栈函数为push函数,由于c++ stl的堆栈不是预设大小的,因此,入栈函数就不考虑堆栈空间是否为满,均将元素压入堆栈,从而函数没有标明入栈成功与否的返回值。

    void push(const value_type& x)

    元素入栈,将元素x压入堆栈,成为栈顶元素。

    下面的实例代码为将元素依次压入堆栈

stack<int> s;
s.push(3);
s.push(19);
s.push(23);
s.push(36);
s.push(50);
元素出栈

    stack容器的元素出栈函数为pop函数。由于函数并没有判断堆栈是否为非空,才进行元素的弹出;因此,需要自行判断堆栈是否为空,才可执行pop函数。

    void pop()

    元素出栈,将栈顶元素从堆栈中删除。该函数并不返回出栈的栈顶元素,一般需要先将栈顶元素取出,才执行出栈操作。

    下面的实例代码为将堆栈中的所有元素全部出栈

while(!s.empty())
{
s.pop();//出栈
}取栈顶元素
    stack容器的栈顶元素的读取函数为top函数

    取出栈顶元素,此函数也要先判断堆栈是否为空,取出栈顶元素才有意义

    下面实例代码为在元素出栈前,先将栈顶元素取出

cout<< s.top()<<endl;//打印栈顶元素
s.pop();//出栈
堆栈非空判断

    随着栈顶元素的不断出栈,堆栈可能会出现空的情况;因此一般需要调用empty函数判断是否为非空,才作元素的出栈和取栈顶元素的操作。

bool empty()

    判断堆栈是否为空,返回true表示堆栈已空,false表示堆栈非空。 

堆栈的大小

    堆栈的元素个数可用size函数获得。每次元素入栈前,先检查当前堆栈的大小,超过某个界限值,则不允许元素入栈,此可实现一个具有一定容量限制的堆栈。

size_type size()返回当前堆栈的元素个数

    下面的实例代码为判断是否栈满,若无,则可继续压栈

if(s.size()<STACK_SIZE)//堆栈未满,元素才可入栈
{
s.push(1);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: