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

题目:

  一个栈依次压入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, 逆序空栈。依次返回插入获取的栈底元素,也就是依次插入5、4、3、2、1;

Solution 1

#include<iostream>
#include<stack>
using namespace std;

int getBottomElement(stack<int> &s) {
    int cur = s.top();
    s.pop();
    if (s.empty()) {
        return cur;
    } else {
        int bottom = getBottomElement(s);
        s.push(cur);
        return bottom;
    }
}
void reverse(stack<int> &s) {
    if (s.empty()) {
        return;
    }
    int bottom = getBottomElement(s);
    reverse(s);
    s.push(bottom);
}
int main()
{
    int n, num;
    cin >> n;
    stack<int> s;
    for (int i = 0; i < n; ++i) {
        cin >> num;
        s.push(num);
        cout << num << " ";
    }
    cout << endl;
    reverse(s);
    while (!s.empty()) {
        cout << s.top() << " ";
        s.pop();
    }
    cout << endl;

    system("pause");
    return 0;
}

注意此程序我是先顺序输入栈元素,调用逆序函数后逆序输出栈元素,所以输出结果相同。

时间: 2024-10-07 04:17: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

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

[题目]? 一个栈依次压入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 *

&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,也就是实现栈中元素的逆序,但是只能用递归函数来实现,而不能用另外的数据结构. 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,也就是实现栈中元素的逆序,但是只能使用递归函数来实现,不能实现其他数据结构. package com.test; import java.util.Stack; /** * Created by Demrystv. */ public class ReverseStack { //将栈stack的栈底元素返回并且删除 private s

【算法题】03-使用递归和栈逆序一个栈

题目 仅用递归操作和栈逆序 一个栈. 一个栈依次压入1.2.3.4.5 那么从栈顶到栈底分别是5,4,3,2,1.将这个栈转置后,从栈顶到栈底为1.2.3.4.5,也就是实现栈中元素的逆序,但是只能用递归来实现 ,不能用其他数据结构. 思路 需要两个递归函数 递归函数一:将栈stack的栈底元素返回并移除 /** * @Desc 获取栈底元素返回并移除 * @param stack * @return */ public static int getAndRemoveLastElement(St