zoukankan      html  css  js  c++  java
  • 如何根据入栈序列判断可能的出栈序列

    [TX面试题]

    题目描述:

    输入两个整数序列,其中一个序列表示栈的push(入)序列,判断另一个序列有没有可能是对应的pop(出)序列。

    解答
    假如输入的push序列是:1、2、3、4、5,那么3、2、5、4、1就可能是一个pop序列,但是5、3、4、1、2就不可能是它的一个pop序列了。

    # 构造一个栈  
    class stack:   
        def __init__(self, maxsize):
            self.top = 0
            self.lst = [None] * maxsize
            self.maxsize = maxsize
    
        def push(self, x):
            if self.top == self.maxsize:
                raise Exception("栈满")
            self.lst[self.top] = x
            self.top += 1
    
        def pop(self):
            if self.top == 0:
                raise Exception("栈空")
            self.top -= 1
            return self.lst[self.top]
    
    
    lis1 = [1, 2, 3, 4, 5]
    lis2 = [3, 2, 5, 4, 1]
    
    
    def judge(lst1, lst2):
        s = stack(10)
        j = 0
        for v in lst1:  
            s.push(v)
            cur = s.pop()
    
            while cur == lst2[j]:
                j += 1
                if j > 4:
                    break
                if s.top == 0:
                    break
                cur = s.pop()
            s.push(cur)
    
        if j != 5:
            return False
        return True
    
    
    print(judge(lis1, lis2))  # True
    
    
  • 相关阅读:
    第七讲 宋词:婉约之曲与豪放之声
    P2024 食物链
    可以吹一年的事
    信息传递
    11.11模拟赛总结(又名斗地主战记)
    11.9模拟赛总结
    扩展欧几里得(exgcd模板)
    发糖果(拓扑排序模板)
    高斯消元
    关于我
  • 原文地址:https://www.cnblogs.com/duanming/p/11830255.html
Copyright © 2011-2022 走看看