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

相关推荐
m0_569881474 分钟前
基于C++的数据库连接池
开发语言·c++·算法
.select.11 分钟前
c++ auto
开发语言·c++·算法
2401_8845632415 分钟前
C++中的访问者模式高级应用
开发语言·c++·算法
智者知已应修善业19 分钟前
【51单片机用两个定时计数器级联实现定时】2023-04-12
c语言·经验分享·笔记·算法·51单片机
君义_noip21 分钟前
信息学奥赛一本通 1613:打印文章
c++·算法·信息学奥赛·csp-s
消失的旧时光-194326 分钟前
C++ 多态核心三件套:虚函数、纯虚函数、虚析构函数(面试 + 工程完全指南)
开发语言·c++·面试·虚函数·纯虚函数·虚析构函数
赵民勇37 分钟前
gtkmm库之GtkWindow与ApplicationWindow用法详解
linux·c++
咱就是说不配啊1 小时前
3.20打卡day34
数据结构·c++·算法
vx-程序开发1 小时前
springboot在线装修管理系统-计算机毕业设计源码56278
java·c语言·spring boot·python·spring·django·php
_饭团1 小时前
字符串函数全解析:12 种核心函数的使用与底层模拟实现
c语言·开发语言·学习·考研·面试·蓝桥杯