zoukankan      html  css  js  c++  java
  • 编程题目 定义栈的数据类型,请在类型中实现一个能够得到栈最小元素的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())
  • 相关阅读:
    python 协程之Greenlet
    python 协程
    python 多进程通信之Manger
    python 多线程通信之Queue
    python 多进程
    python threading之queue
    python threading之同步条件(Event)
    python threading之条件变量同步(condition)
    python之字符串常用方法
    python之字典操作
  • 原文地址:https://www.cnblogs.com/xautxuqiang/p/6431706.html
Copyright © 2011-2022 走看看