class MyStack():
#模拟栈
def __init__(self):
self.items = []
#判断栈是否为空
def isEmpty(self):
return len(self.items)==0
#返回栈的大小
def size(self):
return len(self.items)
#返回栈顶元素
def top(self):
if not self.isEmpty():
return self.items[len(self.items)-1]
else:
return None
#弹栈
def pop(self):
if len(self.items)>0:
return self.items.pop()
else:
print("栈已经为空")
return None
#压栈
def push(self,item):
self.items.append(item)
#第一步:栈底元素移动到栈顶
#第二步:递归调用除栈顶元素之外的子栈
'''方法功能:栈底元素移动到栈顶
'''
def moveBottomToTop(s):
if s.isEmpty():
return
#记录栈顶元素
top1 = s.top()
s.pop()
#生成子栈
if not s.isEmpty():
#递归处理不包含栈顶的子栈
moveBottomToTop(s)
#记录子栈的栈顶元素
top2 = s.top()
s.pop()
#交换栈顶元素与子栈栈顶元素
s.push(top1)
s.push(top2)
else:
s.push(top1)
def reverse_s(s):
if s.isEmpty():
return
#把栈底元素移动到栈顶
moveBottomToTop(s)
top = s.top()
s.pop()
#递归处理子栈
reverse_s(s)
s.push(top)
if __name__ =="__main__":
s = MyStack()
array = input().split()
for i in array:
s.push(i)
reverse_s(s)
print ("翻转后出栈顺序为:")
while not s.isEmpty():
print( s.top())
s.pop()
如何翻转栈的所有元素
猜你喜欢
转载自blog.csdn.net/liuli1926634636/article/details/89458037
今日推荐
周排行