我正在尝试使用空堆栈和变量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();
}
}
}
答案 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,