zoukankan      html  css  js  c++  java
  • 【转】 颠倒栈

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


    个人并不觉得这道题设计的有多么好,纯粹就属于没事卖弄技巧的那种,蛋疼的用递归来颠倒一个栈,又浪费时间又浪费空间。

    解法的思想其实很简单,那么就是你要我颠倒栈,那么我就先把第一个元素保存了,然后弹出其余所有的元素,然后把第一个元素压进去,然后按原来的顺序,压入被弹出的元素,得到的就是  2  3  4  5  1, 2在栈顶,接着用对于前四个,用同样的方法,最后终于颠倒了。

     

    void reverseStack(stack<T>& s)
    {
        int count = stack.size();
        while(count >= 0)
        {
            T data = s.top();
            s.pop();
            subReverse(s,data,count-1);
            count --;
        }
    }
    
    //  把元素data写入floor层
    template <typename T>
    void subReverse(stack<T>& s, T data, int floor)
    {
        if(floor == 0)
        {
            T tmp = s.pop();
            s.pop();
            subReverse(s,data,floor-1);
            s.push(tmp);
        }
        else
            s.push(data);
    }

     

  • 相关阅读:
    多层神经网络与C++实现
    反向传导算法的推导
    sizeof()和strlen()的区别与联系
    Pascal’s Triangle
    Multiply Strings
    spring boot 数据源 配置
    spring boot 静态资源。。
    spring boot 配置 beetl 视图解析器
    spring 使用junit
    spring aspectj 注解
  • 原文地址:https://www.cnblogs.com/cyttina/p/2743200.html
Copyright © 2011-2022 走看看