所有出栈顺序python_“如何翻转栈的所有元素”(python)

该博客讨论了如何在Python中翻转栈中的元素,提供了两种方法:使用额外队列和递归法。递归法通过将栈底元素移动到栈顶并递归处理子栈来实现栈的翻转。代码示例展示了具体实现过程。
摘要由CSDN通过智能技术生成

题目描述:

翻转栈中的所有元素,例如输入栈{1,2,3,4,5}, 其中,1处在栈顶,翻转之后的栈为{5,4,3,2,1}其中,5在栈顶。

方法一:最容易想到的方法就申请额外的一个队列,先把栈中的元素依次出栈放到队列里,然后把队列里的元素按照出队列顺序入栈,然这样就可以实现栈的翻转。

方法二:递归法

递归程序有两个关键的因素需要注意: 递归定义和递归的终止条件。递归定义:将当前栈的最底元素移动到栈顶,其他元素顺次下移一位,然后对不包含栈顶元素的子栈进行同样的操作。终止条件:递归下去直到栈为空。

class Stack:

def __init__(self):

self.items = []

def push(self, x):

self.items.append(x)

def isempty(self):

return len(self.items) == 0

def peek(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 moveBottomTotop(s):

if s.isempty():

return

top1 = s.peek()

s.pop() # 弹出栈顶元素

if not s.isempty():

moveBottomTotop(s)

top2 = s.peek()

s.pop()

s.push(top1)

s.push(top2)

else:

s.push(top1)

def reverse_stack(s):

if s.isempty():

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.isempty():

print(s.peek(), end=" ")

s.pop()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值