笔试题:递归逆序栈
如将栈{5,4,3,2,1}置为{1,2,3,4,5}
分析:
(1)把{1, 2, 3, 4, 5}看成由两部分组成:栈顶元素1和剩下的部分{2, 3, 4, 5},
把{2, 3, 4, 5}颠倒过来,变成{5, 4, 3, 2},然后把原来栈顶元素1放到底部,变成
{5, 4, 3, 2, 1};
(2)把{2, 3, 4, 5}看成由两部分组成:栈顶元素2和剩下的部分{3, 4, 5},
把{3, 4, 5}先颠倒过来,变成{5, 4, 3},然后再把之前的栈顶元素2放到最底部,变成了{5, 4, 3, 2}。
……
这就是递归。
递归结束的条件是栈空.
总结:取出栈顶元素,栈逆序,将栈顶元素压入栈底
stack<int> ReverseStack(stack<int> stack)
{
if(stack.size()=1) return stack;
int top=stack.top();
stack.pop(); //取出栈顶元素
stack=ReverseStack(stack);//逆置栈
stack=PushStack(stack,top);//将栈顶元素压入栈底;
return stack;
}
stack<int> PushStack(Stack<int> stack,int top)
{
if(stack.empty())
{
stack.push(top);//栈为空,将栈顶元素压入栈底
}
else
{
int tmp=stack.top();//不为空,将其他元素弹出后再压入
stack.pop();
stack=PushStack(stack,top)
stack.push(tmp);
}
return stack;
}