上次有说明如何删除栈中指定位置的元素并且不破坏栈结构。主题思想是递归的压出栈顶元素,直到压出指定位置的元素,然后把存贮在递归过程中堆区的栈顶元素依次压回栈,最后返回删除的元素的值。
详情请通过该链接查看点击打开链接
栈的逆序可以利用该函数(get_stack())来实现。
例:1,2,3,4。栈顶元素是4。
思路:
反转1,2,3,4。相当于,取出(get_stack())栈底元素1,将2,3,4反转为4,3,2。然后压入1。
反转2,3,4。相当于,取出(get_stack())栈底元素2,将3,4反转为4,3。然后压入2。
反转3,4。相当于,取出(get_stack())栈底元素3,将4反转为4。然后压入3。
反转4。相当于,取出(get_stack())栈底元素4,此时栈空。
依次压入4,压入3,压入2,压入1。栈反转结束。
上述思路可以用递归来实现。
先贴上流程图,以1,2,3,4。4为栈顶元素为例。
下面是代码:
函数1:获取、删除栈底元素。
int get_stack(stack<int >&a){
int result=a.top();
a.pop();
if(a.empty())
{
return result;
}
else
{
int i=get_stack(a);
a.push(result);
return i;
}
}
函数2:递归反转。
void reverse(stack<int >&a){
if(a.empty())
return ;
int i=get_stack(a);
reverse(a);
a.push(i);
return ;
}
调试:这里是4,3,2,1。 1为栈顶。
运行结果: