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

相关推荐
半桔9 小时前
【网络编程】深入 HTTP:从报文交互到服务构建,洞悉核心机制
linux·网络·c++·网络协议·http·交互
hqwest9 小时前
QT肝8天07--连接数据库
开发语言·数据库·c++·qt·sqlite·上位机·qt开发
WaWaJie_Ngen9 小时前
LevOJ P2080 炼金铺 II [矩阵解法]
c++·线性代数·算法·矩阵
姝孟10 小时前
笔记(C++篇)—— Day 12(类的默认成员函数)
c++·笔记·学习
今后12310 小时前
【数据结构】堆、计数、桶、基数排序的实现
数据结构·算法·堆排序·计数排序·桶排序·基数排序
敲代码的嘎仔10 小时前
牛客算法基础noob59 简写单词
java·开发语言·数据结构·程序人生·算法·leetcode·学习方法
tpoog10 小时前
[C++项目组件]Elasticsearch简单介绍
开发语言·c++·elasticsearch
特立独行的猫a12 小时前
C 语言各种指针详解
java·c语言·开发语言
迎風吹頭髮17 小时前
UNIX下C语言编程与实践9-UNIX 动态库创建实战:gcc 参数 -fpic、-shared 的作用与动态库生成步骤
c语言·数据库·unix
白水先森21 小时前
C语言作用域与数组详解
java·数据结构·算法