逆序栈

只使用递归和栈操作实现栈的逆序

#!/usr/bin/env python
# --*-- coding: utf-8 --*--

def popbottom(s):
    x = s.pop()
    if not s:
        return x
    else:
        bottom = popbottom(s)
        s.append(x)
        return bottom

def reverse(s):
    if not s:
        return
    x = popbottom(s)
    if not s:
        s.append(x)
    else:
        reverse(s)
        s.append(x)

if __name__ == ‘__main__‘:
    s = [1, 2, 3, 4, 5, 6]
    print(‘逆序前:‘)
    print(s)
    reverse(s)
    print(‘逆序后:‘)
    print(s)
时间: 2024-10-12 08:54:33

逆序栈的相关文章

用递归函数和栈操作逆序栈

题目描述 一个栈依次压入1,2,3,4,5那么从栈顶到栈底分别为5,4,3,2,1.将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现了栈中元素的逆序,请设计一个算法实现逆序栈的操作,但是只能用递归函数来实现,而不能用另外的数据结构. 给定一个栈Stack以及栈的大小top,请返回逆序后的栈. 测试样例: [1,2,3,4,5],5 返回:[5,4,3,2,1] Solution 1:思路:第一步,将最上面的数出栈保存,然后将栈逆序(递归) 第二步,将第一步中出栈的数插入到栈的最底层(

O(1) 空间复杂度逆序栈和排序栈

两种操作都是递归实现,汉诺塔思想. #include<iostream> #include<stack> using namespace std; void reverse(stack<int> &s)//逆序栈 { if(s.size()==0) return ; int a=s.top(); s.pop(); if(s.size()==0) { s.push(a); return ; } reverse(s); int b=s.top(); s.pop();

O(1)时间复杂度逆序栈和排序栈

两种操作都是递归实现,汉诺塔思想. 1.逆序栈 void ReverseStack(Stack& stack) { if (stack.Count == 0) return; object top = stack.Pop(); ReverseStack(stack); if (stack.Count == 0) { stack.Push(top); return; } object top2 = stack.Pop(); ReverseStack(stack); //p1 stack.Push(

算法初级面试题08——递归和动态规划的精髓、阶乘、汉诺塔、子序列和全排列、母牛问题、逆序栈、最小的路径和、数组累加成指定整数、背包问题

第八课主要介绍递归和动态规划 介绍递归和动态规划 暴力递归: 1,把问题转化为规模缩小了的同类问题的子问题 2,有明确的不需要继续进行递归的条件(base case) 3,有当得到了子问题的结果之后的决策过程 4,不记录每一个子问题的解 动态规划 1,从暴力递归中来 2,将每一个子问题的解记录下来,避免重复计算 3,把暴力递归的过程,抽象成了状态表达 4,并且存在化简状态表达,使其更加简洁的可能 图灵引入的是:我不知道怎么算,但是我知道怎么试.知道怎么暴力破解出来. 要学会,练习懂得怎么尝试.

栈的逆序

要求:只是用递归实现栈的逆序 实现两个函数: 1.getAndRemoveLastElement(), 该函数用于返回栈底元素,并将其他元素按原来顺序重新压入 2.reverse(),该函数用于逆序栈. 具体代码如下: import java.util.Stack; public class pro3_reverseStack { public static int getAndRemovelastElement(Stack<Integer> stack) { int result = sta

1.3 仅用递归函数和栈操作逆序一个栈

题目:一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1.将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其它数据结构. 1 //仅用递归函数和栈操作逆序一个栈 2 #include <stdio.h> 3 #include "stack.h" //该头文件包含栈操作的原型声明等相关信息 4 5 SqStack stack; 6 7 //获取栈底元素并删除 8 int getAndRemov

【栈】仅用递归函数和栈操作逆序一个栈

题目: 一个栈依次压入1.2.3.4.5,那么从栈顶到栈底分别为5.4.3.2.1.将这个栈转置后,从栈顶到栈底为1.2.3.4.5,也就是实现栈中元素的逆序.但是只能用递归函数来实现,不能用其他数据结构 题解: 需要两个递归函数:1. 将栈底元素返回并删除:2. 逆序一个栈 过程即为获取栈底元素,逆序2.3.4.5,递归后获取栈底元素2,逆序3.4.5,再次递归获取栈底元素3,逆序4.5,再次递归获取栈底元素4,逆序5,最后获取栈底元素5, 逆序空栈.依次返回插入获取的栈底元素,也就是依次插入

只使用递归实现栈的逆序操作

2017-06-23 20:36:02 刚开始思考这个问题的时候陷入了一个误区,就是以为只能用一个递归完成. 然而事实上,可以使用两个递归来完成这个功能. 具体思考是这样的,首先递归其实是将问题规模缩小了,每次处理更小的问题.针对这题来说,更小的问题应该是去除底部那个数后的逆序再加上最后的数. 当然,你可能会问,什么不是去掉最上面的数,然后将它再放到最前面,理由很简单,栈是一种后进先出的数据结构,这种类型的数据结构适合的是在尾部添加数据,而非在首部添加数据,所以更清晰的或者说更适合栈的操作是先把

利用栈逆序元素

要求:利用栈将数组的元素逆序输出 分析:        1.数组中的元素是线性排列 2.栈的特点是先进后出 解题思路:将数组中的元素依次压栈,再出栈.就能实现对数组元素的逆序 1.定义结构体 #define N 50 struct mystack { int top; //栈顶元素 int data[N]; }; struct mystack selfStack={-1,{0}}; //初始栈为空 2.声明函数 int isEmpty();//判断栈是否为空 返回值:1-->空 0-->非空