• 编程题目 定义栈的数据类型,请在类型中实现一个能够得到栈最小元素的minx函数。


    首先自己用 节点 实现了 栈 这种数据类型

    为了实现题目了要求,我使用的两个栈。

    一个栈 用来 push pop 用户的数据, 另外一个栈用来存放 最小元素(涉及元素比较)

    代码如下:

     1 #!/usr/bin/env python3
     2 
     3 class Node(object):
     4         def __init__(self, elem, next_=None):
     5                 self.elem = elem
     6                 self.next = next_
     7 
     8 class LStack(object):
     9         def __init__(self):
    10                 self.top = None
    11 
    12         def is_empty(self):
    13                 return self.top is None
    14 
    15         def push(self, elem):
    16                 self.top = Node(elem, self.top)
    17 
    18         def pop(self):
    19                 if self.is_empty():
    20                         raise ValueError("Stack is Empty")
    21                 e = self.top.elem
    22                 self.top = self.top.next
    23                 return e
    24 
    25         def peek(self):
    26                 if self.is_empty():
    27                         raise ValueError("Stack is Empty")
    28                 return self.top.elem
    29 
    30 class Stack_Find_Min(object):
    31         def __init__(self):
    32                 self.s1 = LStack()
    33                 self.s2 = LStack()
    34                 self.minvalue = 0
    35 
    36         def is_empty(self):
    37                 return self.s1.is_empty()
    38 
    39         def push(self, elem):
    40                 self.s1.push(elem)
    41                 if self.s2.is_empty():
    42                         self.s2.push(elem)
    43                         self.minvalue = elem
    44                 elif elem < self.minvalue:
    45                         self.s2.push(elem)
    46                         self.minvalue = elem
    47 
    48         def pop(self):
    49                 if self.s1.is_empty():
    50                         raise ValueError("Stack is Empty")
    51                 e = self.s1.pop()
    52                 if e == self.minvalue:
    53                         self.s2.pop()
    54                         self.minvalue = self.s2.peek()
    55                 return e
    56 
    57         def peek(self):
    58                 return self.s1.peek()
    59 
    60         def minx(self):
    61                 return self.s2.peek()
    62 
    63 if __name__=="__main__":
    64         sm = Stack_Find_Min()
    65         for i in [3,2,7,9,4,6,8,1]:
    66                 sm.push(i)
    67         print("minx:",sm.minx())
    68         print("pop:",sm.pop())
    69         print("minx:",sm.minx())
  • 相关阅读:
    静态方法、类方法和属性方法
    类的私有属性和私有方法
    JMeter-正则表达式(取出银行卡号后4位)
    JMeter连接MySQL数据库
    解决chrome提示您的连接不是私密连接的方法
    python安装appium模块
    mac中的word内容丢失
    有些事一旦开始就停不下来了
    Python接口测试-以&连接拼接字典数据(get中url请求数据)
    Python接口测试-模块引用与映射
  • 原文地址:https://www.cnblogs.com/xautxuqiang/p/6431706.html
Copyright © 2020-2023  润新知