1. 栈的一个实际需求
请输出一个表达式
计算式:[7*2*2-5+1-5+3-3] 点击计算
请问:计算机底层是如何运算得到结果的?注意不是简单的把算式列出计算,因为我们看这这个算式7*2*2-5+1-5+3-3,但是计算机怎么理解这个算式的(对计算机而言,它接收的就是一个字符串),我们讨论的是这个问题–>栈。
2. 栈的应用场景
- 子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,知道子程序执行完后再将地址取出,以回到原来的程序中。
- 处理递归调用:和子程序的调用类似,只是除了存储下一个指令的地址外,也将参数、区域变量等数据存入堆栈中。
- 表达式的转换[中缀表达式转后缀表达式]与求值(实际解决)。
- 二叉树的遍历。
- 图形的深度优先(depth–first)搜索法。
3. 数组模拟栈的思路分析图
-
使用数组来模拟栈----思路分析
- 定义数组
- 定义一个top来表示栈顶,初始化为-1
- 入栈:当有数据加入到栈时,top++;stack[top]=data;
- 出栈:int value=stack[top]; top–, return value
-
栈的方法:
- 构造器
- 栈满
- 栈空
- 入栈
- 出栈
- 遍历