1.トピック
どのようにのみキュー構造スタック構造を実現するには?
2.分析
2つのスタックキュー:
(1)データというキュー、すべてのデータがこのキュー内に押し込まれます。
必要なスタック操作は、キューの最後の要素とキューを除くすべての要素が助けキューに押し込まれる(2)。
この場合、最後のデータ要素の最後の要素が来ているがある(3)、ポップオフ
(4)と、ヘルプ交換データ参照
==操作サイズまでステップ3を続けて続行するスタック全体(5)0
例:1,2,3,4,5スタックは、外側1,2,3,4ヘルプへの5に加えて、この時点で、最後の5の交換データおよびヘルプを解放したとき、そこには現在、データをキューに入れられますデータ[ヘルプ1,2,3、4に、ヘルプが空である、1,2,3,4を持って...結局キュー1,2,3,4,5中に放出され、5,4,3リリースオーダーを、 2,1。
ヒント:操作キュー#include<queue>
:(
1)s.back()の最後の要素を返します
)((2)s.emptyをキューが空の場合はtrueを返します
(3)s.front()、すなわち、最初のリターンを最初の要素を返します。キューに要素
(4)s.pop()は最初の要素削除
(5)s.push()要素の最後に追加した
(6)s.size()キュー内の要素の数を返すを
3.コアコード
スタックの(1)のうち
、①は、空気は、直接空返すかどうかを判断する
サイズが1より大きい場合(ヘルプが最前面のデータ要素に圧入)ヘルプに、②キュー内のデータ要素を、及びデータのいずれかによって解放さ要素;
③為替のヘルプ、データ参照。
void pop_num(queue<int> &data,queue<int> &help)
{
if(data.size() == 0)
{
cout<<"已空"<<endl;
return;
}
while(data.size() > 1)
{
help.push(data.front());
data.pop();
}
cout<<data.back()<<" ";
data.pop();
swap(data,help);
}
(2)交換
void swap(queue<int> &data,queue<int> &help)
{
queue<int> temp;
temp = data;
data = help;
help = temp;
}
4.完全なコード
#include<queue>
#include<iostream>
using namespace std;
void swap(queue<int> &data,queue<int> &help)
{
queue<int> temp;
temp = data;
data = help;
help = temp;
}
void pop_num(queue<int> &data,queue<int> &help)
{
if(data.size() == 0)
{
cout<<"已空"<<endl;
return;
}
while(data.size() > 1)
{
help.push(data.front());
data.pop();
}
cout<<data.back()<<" ";
data.pop();
swap(data,help);
}
int main()
{
queue<int> data;
queue<int> help;
data.push(10);
data.push(20);
data.push(30);
pop_num(data,help);
data.push(40);
data.push(50);
pop_num(data,help);
pop_num(data,help);
pop_num(data,help);
pop_num(data,help);
pop_num(data,help);
system("pause");
return 0;
}
結果出力
この質問は、40、50に押し込まれ、放出され、10、20に圧入した後、5バックを解放しています。だから、リリースの順序は30,50,40,20,10は、空であります