主要参考资料:01.堆栈基础知识 | 算法通关手册 (itcharge.cn)01.堆栈基础知识 | 算法通关手册 (itcharge.cn)
本文主要采用C++实现,而参考资料主要采用python实现,可以相互结合食用。

基础知识

定义

堆栈(Stack):简称为栈。一种线性表数据结构,是一种只允许在表的一端进行插入和删除操作的线性表。

下面这幅图简单的解释了堆栈的原理,后进先出,只有一个出栈口。

堆栈的基本操作

  • 初始化空栈:创建一个空栈,定义栈的大小 size,以及栈顶元素指针 top
  • 判断栈是否为空:当堆栈为空时,返回 True。当堆栈不为空时,返回 False。一般只用于栈中删除操作和获取当前栈顶元素操作中。
  • 判断栈是否已满:当堆栈已满时,返回 True,当堆栈未满时,返回 False。一般只用于顺序栈中插入元素和获取当前栈顶元素操作中。
  • 插入元素(进栈、入栈):相当于在线性表最后元素后面插入一个新的数据元素。并改变栈顶指针 top 的指向位置。
  • 删除元素(出栈、退栈):相当于在线性表最后元素后面删除最后一个数据元素。并改变栈顶指针 top 的指向位置。
  • 获取栈顶元素:相当于获取线性表中最后一个数据元素。与插入元素、删除元素不同的是,该操作并不改变栈顶指针 top 的指向位置。

堆栈的顺序存储与链式存储

  • 「顺序栈」:即堆栈的顺序存储结构。利用一组地址连续的存储单元依次存放自栈底到栈顶的元素,同时使用指针 top 指示栈顶元素在顺序栈中的位置。
  • 「链式栈」:即堆栈的链式存储结构。利用单链表的方式来实现堆栈。栈中元素按照插入顺序依次插入到链表的第一个节点之前,并使用栈顶指针 top 指示栈顶元素,top 永远指向链表的头节点位置。

最后是通过C++实现

C++数据结构之顺序栈

C++数据结构之链式栈

单调栈

定义

单调栈(Monotone Stack):一种特殊的栈。在栈的「先进后出」规则基础上,要求「从 栈顶栈底 的元素是单调递增(或者单调递减)」。其中满足从栈顶到栈底的元素是单调递增的栈,叫做「单调递增栈」。满足从栈顶到栈底的元素是单调递减的栈,叫做「单调递减栈」。

感觉和汉诺塔很像。

逆波兰算法

逆波兰式(Reverse Polish Notation,RPN,或逆波兰记法),也叫后缀表达式(将运算符写在操作数之后)。

逆波兰算法是典型的使用了栈结构,具体情况可以通过上述链接进入。

C++数据结构之堆栈相关推荐

  1. linux 复制栈数据结构,算法-数据结构-堆栈

    算法-数据结构-堆栈 发布时间:2005-09-09 17:46:22来源:红联作者:frog /*************************************************** ...

  2. 大一新生必看,自学必看,里昂详解数据结构之堆栈

    数据结构之堆栈 有幸掌握浅薄知识,不吝分享,保持独立思考,自主学习,共同进步.另求关注,点赞,评论,感谢!(tips:主页有数据结构全部知识点,以及知识点讲解,建立完善的数据结构知识体) 核心算法思想 ...

  3. Python 数据结构_堆栈

    目录 目录 堆栈 堆栈 堆栈是一个后进先出(LIFO)的数据结构. 堆栈这个数据结构可以用于处理大部分具有后进先出的特性的程序流 . 在堆栈中, push 和 pop 是常用术语: push: 意思是 ...

  4. C# 数据结构 之 堆栈和队列

    堆栈(Stack)是一种特殊的线性表,是一种操作只允许在尾端进行插入或删除等操作的线性表.表尾允许进行插入删除操作,称为栈顶(Top),另一端是固定的,称为栈底(Bottom).栈的操作使按照先进后出 ...

  5. 数据结构之堆栈与队列

    堆栈与队列是两种重要的基础数据结构,一个是先入后出,一个是先入先出,有着广泛的应用,本文分别使用数组与链表实现堆栈与队列 顺序存储方式实现堆栈 #define MaxSize 20 #define E ...

  6. 数据结构的堆栈与内存中堆栈的区别

    随笔 - 20  文章 - 0  评论 - 14 内存堆和栈的区别 原文: http://student.csdn.net/link.php?url=http://www.top-e.org%2Fji ...

  7. 数据结构之堆栈排序图文详解及代码(C++实现)

    代码: #include<iostream> using namespace std; #define MAXSIZE 20//顺序表的最大长度 typedef int KeyType;/ ...

  8. Java LinkedList特有方法程序小解 使用LinkedList 模拟一个堆栈或者队列数据结构。...

    package Collection;import java.util.LinkedList;/* LinkedList:特有的方法 addFirst()/addLast(); getFirst()/ ...

  9. 使用LinkedList模拟一个堆栈或者队列数据结构

    使用LinkedList模拟一个堆栈或者队列数据结构. 堆栈:先进后出  如同一个杯子. 队列:先进先出  如同一个水管. import java.util.LinkedList;public cla ...

最新文章

  1. c++几种STL比较
  2. MATLAB可视化实战系列(二十五)-MATLAB基于直方图的图像去雾
  3. DL之DNN之BP:神经网络算法简介之BP算法/GD算法之不需要额外任何文字,只需要八张图讲清楚BP类神经网络的工作原理
  4. 一朵云、一张网、一体化 ——GRTN 打造最佳流媒体场景实践
  5. 反转链表—leetcode206
  6. python选择语句_3.1Python的判断选择语句
  7. android自验签名证书,没有以前的互联网连接,无法验证Android自签名证书
  8. String类能被继承吗,为什么?
  9. mysql密码安全级别_Mysql数据库的安全性问题释疑
  10. 6. OD-去除收费软件次数限制,去除退出软件时弹出的广告(比如可执行5次)
  11. 一些推荐的深度学习、机器学习资料
  12. Android10相机能够到获取经纬度,但是不能在相机中显示
  13. 戴尔服务器安装linux不能识别硬盘,戴尔服务器重装系统找不到硬盘怎么办.
  14. linux ps1 主机名 ip,Bash Shell PS1: 自定义你的linux提示符十例
  15. Codeforces C. A Mist of Florescence
  16. java写满天繁星,描写满天繁星唯美句子
  17. 几个期货基本面因子的研究
  18. WebApp最佳实践用户体验篇之如何针对多种屏幕尺寸设计合理的移动应用
  19. 微信外部浏览器支付遇到:支付场景非法、appid 未关联paysignkey、商户支付下单id非法 等问题
  20. 前端面试日记(4)- 学而思(笔试+一面+二面)

热门文章

  1. python3.8安装xlwings_Python操作Excel的Xlwings教程(一)
  2. Python批量操作文件写入数据库及从数据库取数据
  3. MP4文件太大怎么变小?简单的方法是什么?
  4. MVC设计模式和MVC框架
  5. Java IO Path接口和Paths类
  6. Linux 实现密钥免密登录
  7. 华彬快消品贵州功能饮料生产基地投产;​唐艺昕成Koradior elsewhere品牌代言人 | 知消...
  8. python 滚动条方法_selenium+python 自动化中界面滚动条操作方法
  9. 抖音sdk接口,抖音上线下线
  10. Python 异步编程之——协程