《劍指offer》:[7]兩個佇列實現棧的C  程式碼實現

問題:兩個佇列實現棧。

    因為佇列的特點是先進先出,而棧式先進後出。所以具體的實現步驟如下:

(1)判斷是否為NULL;如果queue1和queue2都為NULL,則該棧為NULL;
(2)如果queue1不為NULL,而queue2為NULL;則queue1出隊,進隊到queue2,如果queue1的元素個數只剩一個的時候就出隊輸出,也就是出棧;反之亦然;

(3)若果那個佇列不為NULL,則入隊那個佇列,也即入棧;

示意圖如下:

          總之,原則就是:因為我們操作以後一定是有一個queue為NULL。所以,入棧,則是找不為NULL的佇列直接入隊;出棧,則是將不為NULL的queue裡的資料出隊到另一個queue中,直至出隊佇列中剩下最後一個元素後便直接輸出出棧。
利用容器具體程式碼實現如下:

#include<iostream>
#include <algorithm>
#include <queue>
using namespace std;
queue<int> q1;
queue<int> q2;
void InStack(int data)
{
if(q1.empty())//剛開始預設從q2入隊;
{
q2.push(data);
cout<<"InStack:"<<data<<endl;
}
else
{
q1.push(data);
cout<<"InStack:"<<data<<endl;
}
}
void OutStack()
{
if(q1.empty())
{
while(q2.size()>1)
{
q1.push(q2.front());
q2.pop();
}
cout<<"OutStack:"<<q2.front()<<endl;
q2.pop();
}
else
{
while(q1.size()>1)
{
q2.push(q1.front());
q1.pop();
}
cout<<"OutStack:"<<q1.front()<<endl;
q1.pop();
}
}
bool IsEmpty()
{
if(q1.empty() && q2.empty())
return 1;
else
return 0;
}
int main()
{
int array[]={1,2,3};
for(int i=0;i<3;i  )
{
InStack(array[i]); //全部入棧:1,2,3;
}
for(int i=0;i<3;i  )
{
if(IsEmpty()) //判斷是否為NULL;
return NULL;
OutStack();        //全部出棧:3,2,1;
}
system("pause");
return 0;
}

執行結果: