Stack简介
Stack,名为栈,是一种LIFO(Last In First Out)即后进先出的数据结构,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。栈是只能在某一端插入和删除的特殊线性表。
Stack常用API
push():在栈顶添加元素
peek():返回栈顶的元素,但是不删除栈顶元素
pop():和peek()一样返回栈顶元素,但是要将栈顶元素移除掉
empty():检查栈是否为空
search():返回元素在堆栈中的位置
计算器算法核心思路
这里仅以简单的四则运算来讲解思路。
- 使用2个栈,一个用来存数字,一个用来存运算符。
- 首先数字A入数字栈,运算符X入符号栈,然后数字B入数字栈。
- 接着判断现在的运算符Y与符号栈的第一个符号的运算优先级。如果不高于符号栈的第一个符号运算级就运算前面的2个数A和B,如果高于则该运算符继续入栈。
- 而后重复上面的过程。
- 最后在数字栈中的数字仅有一个,就是最终的计算结果。
- 如果要考虑到括号以及高级的科学运算整体思路也差不多,就是在运算优先级上多了几个层级以及括号的无条件压入符号栈。