天天看點

僅用2個棧,将其中一個有序棧反轉過來

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

繼續閱讀