zoukankan      html  css  js  c++  java
  • Python3求栈最小元素

    [本文出自天外归云的博客园]

    思路:入栈时靠辅助栈记住主栈元素中最小的,出栈时一直pop主栈元素直到辅助栈栈顶元素出现。

    代码如下(定义栈、超级栈):

    class Stack(object):
        def __init__(self):
            self.items = []
    
        def push(self, ele):
            self.items.append(ele)
    
        def peek(self):
            return self.items[-1]
    
        def pop(self):
            top = self.items.pop()
            return top
    
    
    class SuperStack(Stack):
        def __init__(self):
            self.stack = Stack()
            self.temp = Stack()
    
        # 入栈的时候把最小的元素放到辅助栈栈顶
        def push(self, ele):
            if self.temp.items == []:
                self.temp.push(ele)
            elif ele < self.temp.peek():
                self.temp.push(ele)
            self.stack.push(ele)
    
        # 出栈的时候一直pop直到等于辅助栈栈顶元素的元素出现
        def pop(self):
            min = self.temp.peek()
            while True:
                if self.stack.peek() != min:
                    print(f'POP:{self.stack.pop()}')
                else:
                    print(f'MIN:{self.stack.peek()}')
                    break
    
    
    if __name__ == '__main__':
        ss = SuperStack()
        ss.push(22)
        ss.push(3)
        ss.push(33)
        ss.push(4)
        ss.push(55)
        ss.push(12)
        ss.push(13)
        ss.push(16)
        ss.pop()

    运行结果:

  • 相关阅读:
    20200929-git地址
    20200917-1 每周例行报告
    20200917-2 词频统计
    20200917-3 白名单
    20200910-1 每周例行报告
    20200910-2 博客作业
    20190919-6 四则运算试题生成,结对
    20190919-3 效能分析
    20190919-2 功能测试
    20190912-1 每周例行报告
  • 原文地址:https://www.cnblogs.com/LanTianYou/p/9056583.html
Copyright © 2011-2022 走看看