Python算法——翻转栈的所有元素

这篇博客探讨了如何翻转栈的所有元素。方法一是使用额外的队列,将栈元素依次出栈放入队列,再从队列回填到栈中;这种方法空间复杂度较高。方法二是通过递归实现,将栈底元素移到栈顶,其他元素下移,递归处理子栈,时间复杂度为O(N)。
摘要由CSDN通过智能技术生成

要求:

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

方法一:

       申请一个额外队列,先把栈中元素依次出栈放到队列里,然后把队列里的元素按照出队列顺序入栈,这样就可以实现栈的翻转,缺点为需要申请额外的空间存储队列,因此,空间复杂度较高。

方法二:

       递归实现

       递归定义:将当前栈的最底元素移到栈顶,其他元素顺次下移一位,然后对不包含栈顶元素的子栈进行同样的操作。

       终止条件:直到栈为空。

操作1  操作2  操作1  操作2  操作1  操作2  操作1
1   5
2   1    1    4    
3   2    2    1     1    3      
4   3    3    2     2    1      1      2    
5   4    4    3     3    2      2      1     1    1
# -*- coding:utf-8 -*-
class Stack():
    #模拟栈
    def __init__(self):
        self.items = []
    #判断栈是否为空
    def empty(self):
        return len(self.items) == 0
    #返回栈的大小
    def size(self):
        return len(self.items)
    #返回栈顶元素
    def peek(se
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值