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

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

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

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

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);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值