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++中,栈可以通过数组或链表来实现,我们会在后续的文章中专门进行介绍。

相关推荐
苦藤新鸡19 小时前
8.最长的无重复字符的子串
c++·力扣
JoyCheung-19 小时前
Free底层是怎么释放内存的
linux·c语言
꧁Q༒ོγ꧂19 小时前
C++ 入门完全指南(四)--函数与模块化编程
开发语言·c++
汉克老师20 小时前
GESP2025年12月认证C++八级真题与解析(判断题8-10)
c++·快速排序··lcs·gesp八级·gesp8级
qq_4335545420 小时前
C++ manacher(求解回文串问题)
开发语言·c++·算法
HL_风神21 小时前
设计原则之迪米特
c++·学习·设计模式
HL_风神21 小时前
设计原则之合成复用
c++·学习·设计模式
汉克老师21 小时前
GESP2025年12月认证C++八级真题与解析(单选题10-12)
c++·递归··gesp八级·gesp8级
一起努力啊~1 天前
算法刷题--长度最小的子数组
开发语言·数据结构·算法·leetcode
小北方城市网1 天前
第1课:架构设计核心认知|从0建立架构思维(架构系列入门课)
大数据·网络·数据结构·python·架构·数据库架构