使用空堆栈和变量v反转堆栈

时间:2014-06-28 01:33:41

标签: stack

我正在尝试使用空堆栈和变量v来反转堆栈。但是我没有得到我应该得到的答案。有人可以帮我这个吗?

void Reverse()
{

    S.push(1);
    S.push(2);
    S.push(3);


    int v;
    for(int i=1;i<S.size();i++)
    {

        v=S.top();
        S.pop();
        for(int j=0;j<S.size()-i;j++ )
        {
            T.push(S.top());
            S.pop();
        }
        S.push(v);

        while(!T.empty())
        {
            S.push(T.top());
            T.pop();
        }

    }
}

1 个答案:

答案 0 :(得分:0)

Stack是后端先进(LIFO)非泛型对象集合(参见http://msdn.microsoft.com/en-us/library/system.collections.stack.aspx)。因此,反转堆栈内容的最简单方法是创建另一个堆栈,然后从原始列表中弹出条目并将其推送到新的堆栈,如下例所示(与.NET / C#实现相关):

Stack _stackOriginal = new Stack();
       _stackOriginal.Push(1);
       _stackOriginal.Push(2);
       _stackOriginal.Push(3);

Stack _stackReverse = new Stack();

while (_stackOriginal.Count>0)
{
_stackReverse.Push(_stackOriginal.Pop());
}

此网站上有另一个解决方案(Does Stack<> constructor reverse the stack when being initialized from other one?),如下所示:

Stack<int> _stackReverse = new Stack<int>(new Stack<int>(_stackOriginal));

RGDS,