その名の通り:同じ種類のようなキューを、最初の人々の最初の行は、治療を取得します
同様のキューとスタック:FIFOキュー表であります
まず、アナログの配列を考慮し、リニアアレイシミュレーション場合は、あまりにも多くのスペースにつながり、そしてなぜだろうか?アナログアレイスタックは、この問題が発生しますか?
キューは、FIFOテーブルがあるため、そのような追加として5つの要素は、アレイ内の位置番号を、今回0-1場所を2つの要素を削除し、テーブルの番号0~4で占めます。この構造を維持するために占めるが、利用されていない番号0-1の位置をキューにつながります。
配列の要素のスタックを削除尾なので、余分なスペースを取ることはありません。
最適化:「リングに配列」(金型を意味します)。
私たちは、各要素がモジュロ下のテーブルに配列を追加した場合、配列全体が円形になり、中に余分なスペースを取って問題はありません
例:スケジューリングアルゴリズムのシミュレーションループ配列
5仕事ではない、完全な実行が尾部にそれを置く場合は、100分までのタスクを実行するたびに、場合の出力時間の実行を終了
0:150-80-200-350-20
1:80-200-350-20-50
2; 200-350-20-50出力180
3:.......
出力:
5 100
150のP1
80 P2
P3 200
P4 350
P5 20
出力:
P2 180
P5 400
450のP1
P3 550
P4 800
コード:
#include <アルゴリズム> の#include <iostreamの> する#include <cstdlib> の#include <fstreamの> する#include <CStringの> する#include <ビットセット> の#include <cstdioを> する#include <TIME.H> の#include <両端キュー> する#include <キュー> の#include <スタック> の#include <cmath> の#include <マップ> 書式#include < 設定 > 使用して名前空間はstdを、#define LEN 100005 のtypedef 構造体PP { チャー名[ 100 ]。 int型のトン。 } P。 PQ [LEN]。 int型のヘッド、テール、N。 ボイドエンキュー(P x)から{ Q [尾] =のX。 尾 =(尾+ 1)%LEN。 } Pデキュー{ P X = Q [ヘッド]。 ヘッド =(ヘッド+ 1)%LEN。 リターンのx; } int型のmain(){ int型 elaps = 0 、C。 INT I、Q; P U; scanf関数(" %d個の%のD "、&N、&Q)。 以下のための(int型i = 0 ; iがn <; iは++ ){ scanf関数(" %sの" 、Q [I] .nameの)。 scanf関数(" %のD "、&Q [i]は.T)。 } ヘッド = 1 ;尾= N + 1 。 しばらく(ヘッド=!尾){ U = デキュー(); C = 分(Q、UT)。 UT - = C。 elaps + = C。 もし(UT> 0 ){ エンキュー(U)。 } 他{ printf(" %sの%d個の\ n " 、u.name、elaps)。 } } 戻り 0 。 }
C ++標準ライブラリ
ヘッダ
書式#include <キュー>
定義
キュー< 整数 > QUE。
尾の要素xに追加されました
que.push(X)。
ヘッド要素を削除します。
que.pop();
ヘッド素子を訪れるが、削除されません。
que.front();
例2:キューの問題を解決することができ幅優先探索
mおよびnは、あなたの3つの操作は、N + 1、-1に、* 2、いくつかの操作が最小メートルを尋ねたことができます
#include <アルゴリズム> の#include <iostreamの> する#include <cstdlib> の#include <fstreamの> する#include <CStringの> する#include <ビットセット> の#include <cstdioを> する#include <TIME.H> の#include <両端キュー> する#include <キュー> の#include <スタック> の#include <cmath> の#include <マップ> 書式#include < 設定 > 使用して名前空間はstdを、構造体A-A { int型のx、I。 }。 %D%D "、&N、&M); キュー <AA> QUE; AA; AI = 0 ; AX = N; que.push(A); int型NUM; 一方!(que.empty()){ A = que.front(); 場合(AX == M){ NUM =は愛; 破る; } // + A = que.front(); AX ++ ; AI ++。 que.push(A)。 //- A = que.front()。 斧 - ; AI ++ ; que.push(A)。 // * A = que.front(); 斧 * = 2 ; AI ++ ; que.push(A)。 que.pop(); } のprintf(" %d個の\ n " 、NUM)。 リターン 0 ; }