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

题目描述

一个栈依次压入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:思路:第一步,将最上面的数出栈保存,然后将栈逆序(递归)   第二步,将第一步中出栈的数插入到栈的最底层(递归)
class ReverseStack {
public:
    vector<int> reverseStackRecursively(vector<int> stack, int top) {
        // write code here
        if(top == 1) return stack;

        int topNum = stack.back();    // 保存最上面的数
        stack.pop_back();     // 最上面的数出栈

        stack = reverseStackRecursively(stack, top - 1);
        stack = insertToBottom(stack, topNum);  // 将最上面的数插入栈底部

        return stack;

    }

    // 递归,将num插入到stack的最底部
    vector<int> insertToBottom(vector<int> stack, int num) {

        if(stack.size() == 0) {
            stack.push_back(num);
            return stack;
        }

        int topNum = stack.back();
        stack.pop_back();
        stack = insertToBottom(stack, num);
        stack.push_back(topNum);
        return stack;
    }
};
时间: 2024-10-05 04:37:45

用递归函数和栈操作逆序栈的相关文章

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

编程3:仅用递归函数和栈操作逆序一个栈

<?php header("content-type:text/html;charset=utf-8"); /* * 仅用递归函数和栈操作逆序一个栈 P8 */ function getAndRemoveLastElement(SplStack $stack){ if($stack->isEmpty()){ return false; } $value = $stack->pop(); if($stack->isEmpty()){ return $value;

[Daily]仅用递归函数和栈操作逆序一个栈

[题目] 一个栈依次压入1,2,3,4,5:那么从栈顶到栈底分别为5,4,3,2,1..将栈转置 [要求] 只能用递归函数来实现. [分析] 该算法需要两个递归函数.分别是getAndRemoveLastElement()和Reverse() 函数名 描述 getAndRemoveLastElement 将栈Stack的栈底元素返回并移除.作为中间步骤被Reverse使用 Reverse 算法的入口.主要功能为将栈顶元素优先压入栈中(放在栈底) 关于getAndRemoveLastElement

&quot;Coding Interview Guide&quot; -- 仅用递归函数和栈操作逆序一个栈

[题目] 一个栈依次压入1.2.3.4.5,那么从栈顶到栈底分别为5.4.3.2.1.将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能使用其它数据结构 [分析] 栈是一种操作受限的数据结构,只能从某一端进行插入和删除和访问元素.能进行插入删除和访问等操作的一端称为“栈顶”,相对的另一端,不能进行任何栈操作,称为栈底.栈中除了栈顶元素外,其它的栈元素都是不允许访问的.所以想要访问栈中其它元素,则只能将将栈中元素依次弹出直到该元素成为栈顶元素

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

题目: 一个栈依次压入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, 逆序空栈.依次返回插入获取的栈底元素,也就是依次插入

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

要求: 一个栈依次压入1,2,3,4,5那么从栈顶到栈底分别为5,4,3,2,1.将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,而不能用另外的数据结构. import java.util.Stack; public class Problem03_ReverseStackUsingRecursive { /* * 递归得到栈底元素 */ public static int getAndRemoveLastElement(Stack<Inte

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

问题描述: 一个栈依次压入1,2,3,4,5那么从栈顶到栈底分别为5,4,3,2,1.将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,而不能用另外的数据结构. 实现代码: #include <stack> #include <stdio.h> using namespace std; int GetAndRemoveBottom(stack<int> &ss) { int top, bottom; top =

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

[题目]? 一个栈依次压入1.2.3.4.5,那么从栈顶到栈底分别为5.4.3.2.1.将这个栈转置后,从栈顶到栈底为1.2.3.4.5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他的数据结构. [解答] ?首先分为两步.第一步,得到栈底元素并移除这个栈底元素:第二步,将得到的栈底元素逆序入栈. [代码] 1 package cn.hl.p3; 2 3 import java.util.Stack; 4 5 /** 6 * title:一个栈依次压入1.2.3.4.5, 7 *

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

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