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