python实现一个包含min函数的栈
题目描述:
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
思路:借助一个辅助栈,用来存放每次栈操作时(包括入栈和出栈)栈中最小元素。
具体实现代码和相关注释如下:
# coding:utf-8
class MinInStack:
def __init__(self):
self.stack = []
# 存放最小值
self.min_stack = []
# 存放长度
self.length = 0
def isEmpty(self):
# 判断是否为空
return self.length == 0
def getLength(self):
# 得到栈的长度
return self.length
def min(self):
# 返回最小值
if self.isEmpty():
print("Stack is empty!")
return
if self.min_stack:
return self.min_stack[-1]
def push(self, data):
if not isinstance(data, int) and not isinstance(data, float):
print("The element must be numeric!")
return
# 压栈
self.stack.append(data)
self.length += 1
# 如果栈为空或者小于最小值
if self.min_stack == [] or data < self.min():
self.min_stack.append(data)
else:
self.min_stack.append(self.min())
def pop(self):
# 弹栈
if self.isEmpty():
print("Stack is empty!")
return
data = self.stack.pop()
self.min_stack.pop()
self.length -= 1
return data
def clear(self):
# 清空栈
self.stack = []
self.min_stack = []
self.length = 0
if __name__ == "__main__":
# 测试部分
mStack = MinInStack()
print("IsEmpty: ", mStack.isEmpty())
mStack.push(15)
print("Min: ", mStack.min())
mStack.push(-1)
print("Min: ", mStack.min())
mStack.push(2.6)
print("Min: ", mStack.min())
mStack.push(0)
print("Min: ", mStack.min())
mStack.push(-6)
print("Min: ", mStack.min())
mStack.push(100)
print("Min: ", mStack.min())
mStack.push(0.6)
print("Min: ", mStack.min())
mStack.push(1.7)
print("Min: ", mStack.min())
print("Length: ", mStack.getLength())
print("Min: ", mStack.min())
print("Pop: ", mStack.pop())
print("Length: ", mStack.getLength())
mStack.clear()
print("IsEmpty: ", mStack.isEmpty())
如有错误, 欢迎指正和交流~