“如何翻转栈的所有元素”(python)

题目描述:

翻转栈中的所有元素,例如输入栈{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()

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值