编程题目 定义栈的数据类型,请在类型中实现一个能够得到栈最小元素的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())
原文地址:https://www.cnblogs.com/xautxuqiang/p/6431706.html