A栈存放数据有序,假设栈顶是最小元素,B栈是一个空栈,现在不使用其他数据结构,可以开辟常量空间,将A栈中的数据反转过来;(乐元素笔试)
分析:其实就是不断的将数据从A中倒到B中,然后从B中倒到A中;首先将A的顶元素压入B,然后弹出A中的顶元素到一个临时变量,后将B中的所以元素弹出压入A,其次将临时变量压入B,然后将刚刚压入A中的元素压入B,这样对A的所有元素这样操作,知道A空,最后将B中的元素全部压入A即可。
代码如下:
// [11/11/2013 qingezha] 两个栈,A栈从顶到底是从小到大顺序压入的,另外B栈为空
// 现在仅用这2个栈,不用其他数据结构,使A栈反序压入
//思想是首先将A 的顶元素压入B,然后将A中顶元素弹出,用一个临时变量保存,其次将B中的元素依次弹出压入A,后将
//临时变量压入B,然后将刚刚压入A中的元素再次弹出,压入B,这样一直到A为空,最后将B中元素全部压入A即可
void rever_stack(stack<int> &a,stack<int> &b)
{
if (a.empty())
{
return;
}
else
{
int min = a.top();
b.push(min);
a.pop();
while(!a.empty())
{
int tempa=a.top();
a.pop();
while(!b.empty())
{
int tempb = b.top();
b.pop();
a.push(tempb);
}
b.push(tempa);
while(a.top()>=min)
{
int tempc = a.top();
a.pop();
b.push(tempc);
}
}
while(!b.empty())
{
int temp = b.top();
b.pop();
a.push(temp);
}
}
}