30.栈的应用场景和介绍

栈的应用场景:

栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_字符变量

栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_字符变量_02

栈的介绍:

栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_数组_03

栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_数组_04

31.栈的思路分析和代码实现

数组模拟栈思路分析:

栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_中缀表达式_05

数组模拟栈的具体实现:

  • 栈的构造,栈满,栈空

栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_数组_06

  • 出栈,入栈

栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_字符变量_07

  • 显示栈的情况(遍历,从栈顶到栈底)

栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_中缀表达式_08

32.栈的功能测试和小结

栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_字符变量_09

练习:用链表模拟栈

33.栈实现综合计算器思路

栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_字符变量_10

34.栈实现综合计算器代码1(中缀表达式)

  • 返回运算符优先级

栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_入栈_11

  • 判断是不是一个运算符

栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_入栈_12

  • 计算方法

栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_运算符优先级_13

  • 定义两个栈结构

栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_数组_14

  • 增加查看栈顶的方法,不弹出值
    栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_字符变量_15

  • 当前运算符优先级小于符号栈栈顶数据的操作

栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_字符变量_16

  • 当前运算符优先级大于符号栈栈顶数据,以及栈顶为空的操作

栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_字符变量_17

  • 如果是数字,就入栈(存放的是字符'1'需要转换处理ASCLL码)

  • 判断是否扫描完输入的表达式
    栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_运算符优先级_18

  • 表达式扫描完毕,顺序从数栈,符号栈中弹出数和符号,并运算

栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_运算符优先级_19

问题:

  • 无法进行多位数的计算比如90+2(因为代码是,单字符扫描)
  • 思考如何解决多位数的计算

35.栈实现综合计算器代码2(中缀表达式)

解决多位数的计算问题思路:

  • 处理数时,判断index下一位,是数就进行扫描,是符号才入栈
  • 定义一个字符串变量keepNum,用于接收
  • 如果接收字符变量ch已经是表达式的最后一位,则直接入栈

栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_字符变量_20

  • 增加如果接收字符变量ch已经是表达式的最后一位,则直接入栈的判断代码:

栈,数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式实现)_韩顺平听课笔记_运算符优先级_21

练习:给表达式加上小括号