C/C++数据结构之栈基础

概述

在食堂或自助餐厅中,清洁的餐盘通常会按照从下到上的顺序堆叠在一起。服务员或者顾客需要使用时,总是从最上面取一个盘子来用,而不是从最下面取一个盘子。为什么呢?因为这些盘子是"后放上去的先拿出来"。这其实就是我们今天要介绍的数据结构 ------ 栈(Stack)。

原理

我们可以把栈想象成这样一个箱子:它只有一个口,叫做栈顶,所有东西都必须从这个口进去或出来。放东西进去,叫压栈(Push)。拿东西出来,叫弹栈(Pop)。

在下面的表格中,我们在不同时间对箱子做了不同的动作。可以看到,越晚放进箱子里的东西,越早被拿出来。

时间 动作 箱子里的内容
第1秒 Push A [A]
第2秒 Push B [A, B]
第3秒 Push C [A, B, C]
第4秒 Pop [A, B] → 弹出的是C
第5秒 Pop [A] → 弹出的是B

栈的核心思想是:后进先出(LIFO:Last In First Out)。也就是说:最后放进来的元素,最先被取出;最先放进来的元素,最后才能被取出。

STL中的栈

在C++ STL标准模板库中,已经提供了栈这种数据结构,即std::stack。如何使用std::stack,可以参考下面的示例代码。

cpp 复制代码
#include <iostream>
#include <stack>

using namespace std;

int main()
{
    stack<int> s;

    // 压入66
    s.push(66);

    // 压入77
    s.push(77);
    
    // 压入88
    s.push(88);

    while (!s.empty())
    {   
        // 打印栈顶元素
        cout << s.top() << " ";

        // 弹出栈顶元素
        s.pop();
    }

    return 0;
}

总结

栈是一种非常重要的线性数据结构,遵循后进先出的原则。栈中元素只能从栈顶进行插入或删除操作,栈底固定不动。栈的典型应用场景包括:函数调用栈、表达式求值与转换、括号匹配检查等。在C/C++中,栈可以通过数组或链表来实现,我们会在后续的文章中专门进行介绍。

相关推荐
Yvonne爱编码5 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
熬夜有啥好5 小时前
数据结构——哈希表
数据结构·散列表
我能坚持多久6 小时前
【初阶数据结构01】——顺序表专题
数据结构
rainbow68897 小时前
EffectiveC++入门:四大习惯提升代码质量
c++
秋邱7 小时前
用 Python 写出 C++ 的性能?用CANN中PyPTO 算子开发硬核上手指南
开发语言·c++·python
我在人间贩卖青春7 小时前
C++之析构函数
c++·析构函数
rainbow68897 小时前
深入解析C++STL:map与set底层奥秘
java·数据结构·算法
我在人间贩卖青春7 小时前
C++之数据类型的扩展
c++·字符串·数据类型
wangjialelele8 小时前
平衡二叉搜索树:AVL树和红黑树
java·c语言·开发语言·数据结构·c++·算法·深度优先
苏宸啊8 小时前
C++栈和队列
c++