zoukankan      html  css  js  c++  java
  • Q:关于栈的常见问题

     对于栈,一个常见的问题是:给定一个序列a0,a1,a2,a3...an依次顺序入栈,在元素顺序入栈的过程中,栈中任意一个元素可以选择是否出栈,则其共有几种出栈的可能,给定的出栈序列中,哪种是不可能的。
     针对以上的这个问题(实际上是两个),对于出栈的可能的种类数目,其总共有

    (S=frac{1}{n+1}inom{2n}{n}=frac{(2n)!}{(n+1)!n!})详见卡塔兰数问题wiki链接

    其中,关于哪种出栈序列是不可能的问题,其判定的情况为,对于出栈序列中的一个数ak,(0<=k&&k<=n),若其后面出现了一个数az满足k-z>=2,则看入栈序列中夹在ak和az间的数是否已经出过栈,若已经出过栈,则其出栈序列为可能的,否则为不可能的出栈序列。

    例如:

    对于序列1,2,3,4,5将其依次入栈,判断如下两种出栈序列是否为可能的

    1: 1,5,3,4,2

    2: 1,3,5,2,4

     对于出栈序列1:其为不可能的序列,因为在出栈序列中出现了“5,3”这样的出栈顺序,而在原序列(入栈序列)中,夹杂在“5,3”这样的序列的数“4”并没有先于“5”这个数出栈,为此,其为不可能的出栈序列

     对于出栈序列2:其为不可能的出栈序列,因为在出栈序列中出现了“5,2”这样的出栈顺序,而在原序列(入栈序列)中,夹杂在“5,2”这样的序列的数“3,4”中的数“4”并没有先于“5”这个数出栈,为此,其为不可能的出栈序列

     对于栈的应用有很多,例如:大数加法(超过long,double中能表示的范围,当然,这里针对java等而言,对于python,我笑~),括号分隔符匹配问题,双栈法求表达式的值,逆波兰算法,递归函数调用之间的链接和信息交换,二叉树的非递归遍历等等,只要满足后进先出的原则的均可使用栈来进行实现。
    点击此进行查看

    回到目录|·(工)·)

  • 相关阅读:
    TCP三次握手四次挥手
    TCP与UDP的区别
    mysql从库设置全局只读,并创建普通账号
    docker安装mysql主从
    mysql 更换数据目录
    Docker 部署 ElasticSearch
    js获取地址栏传参
    PHP-MySQL基本操作
    基于element-tree-table树型表格点击节点请求数据展开树型表格
    拖拽读取文件
  • 原文地址:https://www.cnblogs.com/MyStringIsNotNull/p/8205658.html
Copyright © 2011-2022 走看看