[温故而知新] 数据结构
| peek() | 将栈顶元素返回 |
| pop() | 在将栈顶元素从栈中移出后,将该栈顶元素返回 |
| push(Object) | 将给定元素插入栈顶 |
| search(Object) | 返回给定对象在栈中的位置 |
| empty() | 判断栈是否为空 |
about: RPN范式
如果一个算术表达式中的每一个运算符均位于操作数的后面,称这样的表示为表达式的后缀表示,也称为逆波兰表示(reverse Polish notation,or RPN)。
简单的说:
Equation with parenthesis (1 + 2) * 3
Prefix notation * 3 + 1 2 or * + 1 2 3
Postfix notation 1 2 + 3 * or 3 1 2 + *
第一个表达式是通常带括号的算术表达式,第二是波兰范式,后一种就是逆波兰范式
使用(逆)波兰范式可以省去括号,让表达式顺序执行。
逆波兰范式这个网页介绍得比较清楚:http://users.ece.gatech.edu/~mleach/revpol/ 可以在本BLOG的文章收藏中找到
把嵌套括号的表达式翻译成RPN表达式可以减少循环,加快求值速度。
把普通算术表达式翻译成RPN表达式方法如下(转贴自http://www.cs.utsa.edu/~wagner/CS1723/fall01/eval/trans.html):
可以在本BLOG的文章收藏中找到
小结:
stack的后进先出。
计算机操作系统在执行一个递归函数时,通过使用一个stack来保存每次递归调用时当前运行状态
stack应用相关的有RPN(Reverse Polish notation)范式,其中RPN又分为后缀表达式与前缀表达式
利用stack,可以实现一个字母的倒序排列。 即reverse方法
待续...
《数据结构习题与解答 For JAVA》
浙公网安备 33010602011771号