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); } } }