栈(Stack)
问题引入:
如何计算[3+2*6-2]
这个字符串呢?
先入后出(FILO FirstInLastOut)
栈顶和栈底,Top:可以插入和删除,Bottom是固定的一端
栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表
- 子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再
将地址取出,以回到原来的程序中。
- 处理递归调用:和子程序的调用类似,只是除了储存下一个指令的地址外,也将参数、区域变
量等数据存入堆栈中。
- 二叉树的遍历。
- 图形的深度优先(depth 一 first)搜索法。
数组实现栈
加减乘除算法用栈实现
1. 创建两个栈,numStack,operStack
2. exp计算表达式
3. 扫描是数字,直接入numStack;
4. 如果是运算符
4.1 如果operStack是空栈,直接入栈;
不是空栈的话,如果栈顶的运算符优先级大于当前准备入栈的运算符优先级,先pop出栈
并将数栈也pop出两个数,进行运算,将运算的结果push到数栈,符号再入符号栈
5. 如果扫描表达式完毕,依次从符号栈取出符号,然后从数栈取出两个数,运算后的结果入数栈,直到符号位为空.register
/*
@Time : ${DATE} ${TIME}
@Author : ${USER}
@File : ${NAME}
@Software: ${PRODUCT_NAME}
package ${GO_PACKAGE_NAME}
*/