【转】 颠倒栈

题目:用递归颠倒一个栈。例如输入栈{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);
}

 

 

posted @ 2012-10-28 10:49  三更_雨  阅读(328)  评论(0编辑  收藏  举报