【编程题目】颠倒栈☆

66.颠倒栈(栈)。
题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1 在栈顶。
颠倒之后的栈为{5, 4, 3, 2, 1},5 处在栈顶。

思路:我自己没做出来,因为总觉得用不上递归。看了网上答案http://blog.csdn.net/cxllyg/article/details/7655935 根据里面的思路 自己照着写了一遍

/*
66.颠倒栈(栈)。
题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1 在栈顶。
颠倒之后的栈为{5, 4, 3, 2, 1},5 处在栈顶。
*/

//自己没有理解用递归的含义 看了网上的答案http://blog.csdn.net/cxllyg/article/details/7655935

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

void pushToStackBottom(vector<int> & stack, int t)
{
    if (stack.empty())
    {
        stack.push_back(t);
    }
    else
    {
        int T = stack.back();
        stack.pop_back();
        pushToStackBottom(stack, t);
        stack.push_back(T);
    }
}

void reverseStack(vector<int> &stack)
{
    if (!stack.empty())
    {
        int t = stack.back();
        stack.pop_back();
        reverseStack(stack);
        pushToStackBottom(stack, t);
    }
}

int main()
{
    vector<int> s;
    s.push_back(1);
    s.push_back(2);
    s.push_back(3);
    s.push_back(4);
    s.push_back(5);

    reverseStack(s);
    return 0;
}

【编程题目】颠倒栈☆,布布扣,bubuko.com

时间: 2024-12-26 08:28:00

【编程题目】颠倒栈☆的相关文章

【编程题目】栈的 push、pop 序列

29.栈的 push.pop 序列(栈)题目:输入两个整数序列.其中一个序列表示栈的 push 顺序,判断另一个序列有没有可能是对应的 pop 顺序.为了简单起见,我们假设 push 序列的任意两个整数都是不相等的. 比如输入的 push 序列是 1.2.3.4.5,那么 4.5.3.2.1 就有可能是一个 pop 系列.因为可以有如下的 push 和 pop 序列:push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,这样得到的 pop

【目录】编程题目

编程题目 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1) 一个数组是由一个递减数列左移若干位形成的,在这种数组中查找某一个数.☆ 请修改 append 函数,利用这个函数实现两个非降序链表的并集 一串首尾相连的珠子(m 个),有 N 种颜色(N<=10),取出其中一段,要求包含所有 N 中颜色,并使长度最短. 求一个有向连通图的割点,割点的定义是,如果除去此节点和与其相关的边, 有向图不再连通 有 n 个长为 m+1 的字符串,如果某个字符串的最后 m 个字符与某个字符串的前

微软算法100题66 颠倒栈

66.颠倒栈.题目:用递归颠倒一个栈.例如输入栈{1, 2, 3, 4, 5},1 在栈顶.颠倒之后的栈为{5, 4, 3, 2, 1},5 处在栈顶. 思路: 首先想到的是再创建一个新栈,用来接收旧栈的数据,但这样空间复杂度是o(n),可不可以用原有的栈完成颠倒的操作呢? 假设栈里只有两个元素1,2,pop出1后,栈里剩下2,我们所做的是把2再弹出,将1push回栈,再push2, 比较重要的是往回push的过程,如果判断栈里还有剩余元素,则需要把剩余元素先都pop出栈,再push元素入栈,这

【编程题目】从尾到头输出链表(链表)☆

58.从尾到头输出链表(链表).题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值.链表结点定义如下:struct ListNode{int m_nKey;ListNode* m_pNext;}; 我的思路:用一个数组存起来已有的数字,再反过来输出.缺点是数组大小是确定的 链表长度不能超过数组的大小 /* 58.从尾到头输出链表(链表). 题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值.链表结点定义如下: struct ListNode { int m_nKey; ListN

【编程题目】字符串的排列(字符串)★

53.字符串的排列(字符串).题目:输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串 abc,则输出由字符 a.b.c 所能排列出来的所有字符串abc.acb.bac.bca.cab 和 cba. 这道题花了我一天,要好好总结! 思路:这道题目感觉有些难,主要是字符串中的字符可能会有重复.我的想法是把一共有多少种字符和每种字符出现的次数统计出来,每个位置对这些字符变量,下一个位置的可用字符减小,再遍历. /* 53.字符串的排列(字符串). 题目:输入一个字符串,打印出该字符串中字

39.递归颠倒栈

http://zhedahht.blog.163.com/blog/static/25411174200943182411790/ 分析:乍一看到这道题目,第一反应是把栈里的所有元素逐一pop出来,放到一个数组里,然后在数组里颠倒所有元素,最后把数组中的所有元素逐一push进入栈.这时栈也就颠倒过来了.颠倒一个数组是一件很容易的事情.不过这种思路需要显示分配一个长度为O(n)的数组,而且也没有充分利用递归的特性. 我们再来考虑怎么递归.我们把栈{1, 2, 3, 4, 5}看成由两部分组成:栈顶

编程题目分类(剪辑)

1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. 模拟 12. 算术与代数 13. 组合问题 14. 数论 15. 网格,几何,计算几何 [编程入门] PC 110101, uva 100, The 3n+1 problem, 难度 1 PC 110102, uva 10189, Minesweeper, 难度 1 PC 110103, uva 10137, The T

OJ——华为编程题目:输入字符串括号是否匹配

package t0815; /* * 华为编程题目:输入字符串括号是否匹配 * 若都匹配输出为0,否则为1 * 样例输入:Terminal user [name | number (1)] * 样例输出:0 * Java版本 */ /* * 个人总结: * (1)语法上Java的输入Scanner使用 * (2)char[] arr=mxf.toCharArray()的使用,将输入的字符串转成字符数组:这样就可以一个 * 一个的遍历 * (3)算法上,这里使用了经典的入栈和出栈的思想 * */

【编程题目】n 个骰子的点数

67.俩个闲玩娱乐(运算).2.n 个骰子的点数.把 n 个骰子扔在地上,所有骰子朝上一面的点数之和为 S.输入 n,打印出 S 的所有可能的值出现的概率. 思路:用递归把每个骰子的可能情况变量,记录各种和S出现的次数 比上 总情况数就是概率 /* 67.俩个闲玩娱乐(运算). 2.n 个骰子的点数. 把 n 个骰子扔在地上,所有骰子朝上一面的点数之和为 S.输入 n, 打印出 S 的所有可能的值出现的概率. */ #include <stdio.h> #include <stdlib.