仅用2个栈,将其中一个有序栈反转过来

时间:2021-07-19 11:04:39

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