"""
翻转栈的所有元素,例如输入栈{1,2,3,4,5},其中,1处在栈顶,翻转之后的栈为{5,4,3,2,1},其中,5处在栈顶。
"""
class Stack:
def __init__(self):
self.items = []
def empty(self):
return len(self.items) == 0
def size(self):
return len(self.items)
def peek(self):
if not self.empty():
return self.items[len(self.items) - 1]
else:
return None
def pop(self):
if not self.empty():
return self.items.pop()
else:
print('栈已经为空')
def push(self, x):
self.items.append(x)
def moveBottomToTop(s):
"""
方法功能:把栈底元素移动到栈顶
:param s: 栈的引用
:return:
"""
if s.empty():
return
top1 = s.peek()
s.pop() # 弹出栈顶元素
if not s.empty():
# 梯归处理不包含栈顶元素的子栈
moveBottomToTop(s)
top2 = s.peek()
s.pop()
# 交换栈顶元素与子栈栈顶元素
s.push(top1)
s.push(top2)
else:
s.push(top1)
print(s.peek())
def reverse_stack(s):
if s.empty():
return
# 把栈底元素移动到栈顶
moveBottomToTop(s)
top = s.peek()
s.pop()
# 梯归处理子栈
reverse_stack(s)
s.push(top)
if __name__ == '__main__':
s = Stack()
s.push(5)
s.push(4)
s.push(3)
s.push(2)
s.push(1)
reverse_stack(s)
print('翻转后出栈的顺序为:')
while not s.empty():
print(s.peek())
s.pop()
运行结果如下:
翻转后出栈的顺序为:
5
4
3
2
1