当前位置: 首页 > news >正文

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,可以参考下面的示例代码。

#include <iostream>
#include <stack>using namespace std;int main()
{stack<int> s;// 压入66s.push(66);// 压入77s.push(77);// 压入88s.push(88);while (!s.empty()){   // 打印栈顶元素cout << s.top() << " ";// 弹出栈顶元素s.pop();}return 0;
}

总结

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


文章转载自:

http://FW85ocpH.prLgn.cn
http://n3rfd4qj.prLgn.cn
http://7MwEGxoR.prLgn.cn
http://6GnJpMFL.prLgn.cn
http://k4KO9rP0.prLgn.cn
http://GUcRHuWv.prLgn.cn
http://dYBs8XVO.prLgn.cn
http://dCzcycRz.prLgn.cn
http://5YvrCMYs.prLgn.cn
http://gwNV2CGB.prLgn.cn
http://TXSdEXiR.prLgn.cn
http://h01hUHo3.prLgn.cn
http://SIBdzYMI.prLgn.cn
http://MuBaFY7M.prLgn.cn
http://pcR24fkI.prLgn.cn
http://uZoQxB44.prLgn.cn
http://r3GFOGQr.prLgn.cn
http://EZjWD8Ao.prLgn.cn
http://WyqfwPhn.prLgn.cn
http://D3VxS9bs.prLgn.cn
http://7C9P3QEy.prLgn.cn
http://gGB1zIcX.prLgn.cn
http://AI6Lilrw.prLgn.cn
http://CiVSJEIz.prLgn.cn
http://rOGuJOb5.prLgn.cn
http://I0SJT6z6.prLgn.cn
http://YrohOFmx.prLgn.cn
http://A0xxb83v.prLgn.cn
http://H64gbDxC.prLgn.cn
http://fH518Uoa.prLgn.cn
http://www.dtcms.com/a/371699.html

相关文章:

  • 【Qt】项目的创建和各个控件的使用
  • Python高级技巧(七):装饰器
  • C#有人IO模块USR-IO808的完整指南
  • Apache Dubbo学习笔记-使用Dubbo发布、调用服务
  • CTFshow系列——PHP特性Web97-
  • Photoshop - Photoshop 创建图层蒙版
  • DevOps实战(3) - 使用Arbess+GitLab+Hadess实现Java项目自动化部署
  • Python从入门到精通_00_初识python
  • LabVIEW 与 PLC 通讯
  • 项目介绍:图像分类项目的最小可用骨架--代码细节讲解
  • 【.Net技术栈梳理】01-核心框架与运行时(CLR与GC)
  • 简述ajax、node.js、webpack、git
  • Java安全体系深度研究:技术演进与攻防实践
  • Drupal XSS漏洞复现:原理详解+环境搭建+渗透实践(CVE-2019-6341)
  • Mybatis常见问题
  • Python基础语法篇:布尔值是什么?True 和 False 的实际用途
  • FMI(Functional Mock-up Interface,功能模型接口)
  • macOS中设置环境变量的各文件及作用域
  • Python+DRVT 从外部调用 Revit:批量创建楼板
  • 课前准备--解码乳腺癌进展:单细胞基因组与转录组的联合分析
  • 机器学习中的损失函数是什么
  • P5019 [NOIP 2018 提高组] 铺设道路
  • 【 苍穹外卖 | Day2】
  • 简单的说一说前端开发语言React
  • 跨域解决方案——CORS学习了解
  • leetcode 1304. 和为零的 N 个不同整数 简单
  • LeetCode 面试经典 150 题:合并两个有序数组(双指针解法详解)
  • Nestjs框架: 基于策略的权限控制(ACL)与数据权限设计
  • Go语言实战案例-实现简易定时提醒程序
  • 如何在项目中使用 Claude 记忆库系统(二开场景指南)