博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
栈和队列
阅读量:6456 次
发布时间:2019-06-23

本文共 1575 字,大约阅读时间需要 5 分钟。

1.栈

2.栈的典型应用场合

1)逆序输出:输出次序与处理过程颠倒,递归深度和输出长度不易预知

2)递归嵌套:具有自相似性的问题可递归描述,但分支位置和嵌套深度不固定

3)延迟缓冲:

4)栈式计算:RPN,基于栈结构的特定计算模式

 

3.进制转换

4.括号匹配

思路:消去一对紧邻的左右括号,不影响全局的匹配判断

问题在于如号找到这对括号?如何使问题的这种简化得以持续进行?

顺序扫描表达式,用栈记录已扫描的部分

反复迭代:凡遇"(",则进栈;凡遇")",则出栈,若最后一个)处理完后,整个栈变空,原来的表达式为匹配的

使用栈结构 import java.util.Stack;public class StackDemo{    public static void main(String [] args){        String str="(1+2+((22+2)*98)+(32-2))*22";        StringBuilder sb=new StringBuilder(str);        Stack
stack=new Stack
(); int len=sb.length(); for(int i=0;i

使用计数器进行判定是否匹配

以0开始,以0结束

采用栈结构,可以便捷地推广至多种括号并存的情况。

5.栈混洗

A---->S---->B

栈混洗计数

catalan(n)=(2n)!/(n+1)!n!

任意三个元素能否按某相对次序出现于混洗中,与其他元素无关

甄别栈混洗:

对于任何1<=i<j<k<=n,[...,k,...,i,...,j...]必非栈混洗

一个排列如果不包含上述序列,则一定是栈混洗

O(n)算法,直接借助栈A,B和S,模拟混洗过程,每次S.pop()之前,检测S是否已空;或需弹出的元素在S中,却非顶元素

每一栈混洗,都对应于栈S的n次push与n次pop操作构成的序列

(        (         (         )          )         (          )       )push(1)   push(2)     push(3)    pop(3)      pop(2)    push(4)     pop(4)   pop(1)

6.中缀表达式求值

计算次序未必与扫描的次序一致,将所有扫描过的部分保存到栈中

求值算法=栈+线性扫描

使用两个栈,分别存放运算符和数字

当数字栈中遇到连续数字时,应将当前数字栈顶的数乘以10加上当前数字再入栈。

“(”后遇到运算符时,大部分都执行运算符入账操作,“)”后遇到运算符时,大部分都执行运算符出栈操作。

7.逆波兰表达式,RPN

在由运算符和操作数组成的表达式中不使用括号,即可表示带优先级的运算关系

0 ! 1+ 2 3 ! 4 - 5 ^ - 67 * - 8 - 9 +

只需一个栈即可,每遇到一个数字则入栈,每遇到一个操作符则执行计算

8.中缀表达式到RPN表达式的转换

(0!+1)^(2*3!+4-5){([0!]+1)^([(2*[3!])+4]-5)}{([ 0 ] ! 1 ) + ( [ ( 2 [3]! ) *  4 ] + 5) - }^0 ! 1 + 2 3 ! * 4 + 5 - ^ 变换之后,数字的相对次序并没有改变

转换算法:

若读取的为数字则直接入RPN栈,如果读取的为运算符,只有当运算符栈顶的元素优先级高于该运算符时,将栈顶的运算符出栈,压入RPN栈

 

转载于:https://www.cnblogs.com/lvjygogo/p/8534685.html

你可能感兴趣的文章
Linux系统编程——进程调度浅析
查看>>
大数据Lambda架构
查看>>
openCV_java 图像二值化
查看>>
状态模式
查看>>
删除CentOS / RHEL的库和配置文件(Repositories and configuraiton files)
查看>>
DJANGO变动库的一次真实手动经历
查看>>
VC++获得微秒级时间的方法与技巧探讨(转)
查看>>
HDOJ-1010 Tempter of the Bone
查看>>
MySQL my.cnf参数配置优化详解
查看>>
JavaNIO基础02-缓存区基础
查看>>
日本开设无人机专业,打造无人机“人才市场”
查看>>
190行代码实现mvvm模式
查看>>
PXE部署实例
查看>>
cobbler初探------实现自动安装centos6.4
查看>>
Android Studio 2.0 preview3 BUG
查看>>
兼容几乎所有浏览器的透明背景效果
查看>>
Go语言4
查看>>
jeesite 框架搭建与配置
查看>>
TCP协议中的三次握手和四次挥手(图解)
查看>>
Session 的两种实现机制
查看>>