数据结构与算法(C++)– 栈(Stack)


1、栈是什么

  • 后进先出(Last in, First out)
  • push 入栈,pop 出栈,top栈顶

2、栈的实现

单链表:在单链表的前端插入实现 push 操作,删除前端元素实现 pop 操作,前端元素即为 top。
数组:用 vector 的 push_back 和 pop_back 实现 push 和 pop 操作


3、栈的应用

平衡符号 (Balancing Symbols): 检查左右括号是否平衡

  • 新建一个空栈
  • 依次读取所有符号。 如果是左括号压栈;如果是右括号且栈为空提示错误,否则出栈一个符号,如果出栈的符号不是与之配对的左括号提示错误
  • 读取完所有符号后栈不是空的,提示出错

第一排符号平衡,第二排出栈符号不匹配出错。

后缀表达式 (Postfix Expressions):

  • 新建一个空栈
  • 依次读取字符,如果是数字压栈;如果是符号则出栈两个数字进行运算,把结果压栈。
  • 读取完所有的字符,栈中只有一个元素即计算结果。

计算后缀表达式:5 7 3 * + 6 2 * 1 + 10 / -

中缀到后缀的转换 (Infix to Postfix Conversion):

  • 新建一个空栈
  • 依次读取字符,如果是数字直接输出,符号不直接输出
  • 如果是符号且栈是空的或者目前栈顶的符号优先级小于正在读取的符号,则把符号压栈;如果目前栈顶的符号优先级大于正在读取的符号,则不断出栈直到栈顶的符号优先级小于正在读取的符号,然后把正在读取的符号压栈。
  • 如果读取到右括号(不压栈),则不断出栈直到遇到左括号(出栈但不输出)。

中缀表达式:5 + 7 * 3 - ( 6 * 2 + 1 ) / 10 转为后缀表达式:5 7 3 * + 6 2 * 1 + 10 / - :

中缀转后缀并计算:


数据结构与算法(C++)– 栈(Stack)相关推荐

  1. 数据结构与算法之栈入门题目

    数据结构与算法之栈题目 目录 用数组实现大小固定的队列和栈 实现一个特殊的栈,在实现栈的基础功能上,再实现返回栈中最小元素的操作 如果仅用栈结构实现队列结构和如何仅用队列结构实现栈结构 1. 用数组实 ...

  2. 数据结构与算法--简单栈实现及其应用

    栈 栈(Stack)是一种限制插入和删除只能在一个位置上进行的表,改位置是表的末端,叫做栈顶top.栈的基本操作有push (进栈)pop(出栈) 栈又叫做LIFO(后进先出)表,下图展示普通push ...

  3. C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划

    C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...

  4. 数据结构与算法--利用栈实现队列

    利用栈实现队列 上一节中说明了栈的特点 后进先出,我们用数组的方式实现了栈的基本操作api,因此我们对栈的操作是不考虑排序的,每个api的操作基本都是O(1)的世界,因为不考虑顺序,所以找最大,最小值 ...

  5. 新星计划Day7【数据结构与算法】 栈Part1

    新星计划Day7[数据结构与算法] 栈Part1

  6. java stack 从1.5开始?_java数据结构与算法之栈(Stack)设计与实现

    本篇是java数据结构与算法的第4篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 栈是一种用于存储数据的简单数据结构,有点类似链表或者顺序表(统称线性表),栈与线 ...

  7. 数据结构与算法之-----栈(Stack)

    [ 写在前面的话:本专栏的主要内容:数据结构与算法. 1.对于​​​​​​​初识数据结构的小伙伴们,鉴于后面的数据结构的构建会使用到专栏前面的内容,包括具体数据结构的应用,所使用到的数据结构,也是自己 ...

  8. 数据结构与算法(2)——栈和队列

    前言:题图无关,只是好看,接下来就来复习一下栈和队列的相关知识 前序文章: 数据结构与算法(1)--数组与链表(https://www.jianshu.com/p/7b93b3570875) 栈 什么 ...

  9. 【数据结构与算法】栈与队列

    栈 一.什么是栈? 1.后进者先出,先进者后出,这就是典型的"栈"结构. 2.从栈的操作特性来看,是一种"操作受限"的线性表,只允许在端插入和删除数据. 二.为 ...

  10. 数据结构与算法之-----栈的应用(三)

    [ 写在前面的话:本专栏的主要内容:数据结构与算法. 1.对于​​​​​​​初识数据结构的小伙伴们,鉴于后面的数据结构的构建会使用到专栏前面的内容,包括具体数据结构的应用,所使用到的数据结构,也是自己 ...

最新文章

  1. Socket通信原理探讨(C++为例)
  2. tensorflow随笔-队列(1)
  3. MOSN 多协议扩展开发实践
  4. ES6第一节:开发环境的搭建
  5. Objective-C代码学习大纲
  6. 命名集 —— 名字结构
  7. Atiitt 项目 产品 实现的目标
  8. Vs2015常见错误码:error LNK2019: 无法解析的外部符号;error C2011:类型重定义;
  9. 自动驾驶决策规划研究综述
  10. SSM+广西壮族文化宣传网站 毕业设计-附源码230932
  11. android文件恢复功能,终于找到了安卓手机删除的文件的恢复方法值得一看
  12. 西奥电梯服务器故障维修,电梯维保须知:西子奥的斯电梯故障分析及解决
  13. windows registry = control pannel
  14. 介绍中国传统节日的网页html,介绍中国传统节日的作文4篇
  15. three.js重新计算UV
  16. Jasper(1)——入门
  17. Microsoft Windows CE 编程的十点忠告
  18. 【PIL】图像分割竞赛中8位深调色板模式的mask读取与保存(PASCAL VOC)
  19. 思科 计算机网络 第四章测试考试答案
  20. Java深度学习系列——深入学习String

热门文章

  1. 【Windows10】我的电脑从新装到优化配置
  2. 2018-07-17-Python全栈开发day28-描述符应用与类的装饰器-part1
  3. [Linux]centOS7-1-1503-x86_64下安装VM-TOOLS
  4. datalength,求字符串的字节数
  5. Grid布局和Flex布局
  6. SNMP学习笔记之SNMPv3的配置和认证以及TroubleShooting
  7. Android 高效的`InjectView – ButterKnife`
  8. logback与log4j比较
  9. Linux监控命令之==top
  10. Delphi实现类似Android锁屏的密码锁控件