キュー紹介
我々はスーパーマーケットを支払う場合は、最初の行は、キューの機能がある(除外キューをジャンプ)は、常に最初の支払いが完了している「先入れ先出しで、ポストの最後の」
機能
- キューは、順序付きリストで、配列やリンクリストを介して達成することができます
- 「先入れ先出しで、後に後方アウトの原則」をフォロー
- 配列を表すキューは、データは常にトップアウトデータで、底部に挿入され、図
第二に、シミュレーションアレイコホート分析
MaxSizeが、MAXSIZE-1は、最大キュー、前部およびキューの前後のインデックスがインデックスは、フロント抽出されたデータが変更され、変更データが後に追加されたときであることを、配列の長さであります
あなたは、データを追加する場合:
- まず、キューが満杯であるかどうか、どのようにフルかどうかを判断するには?
データの追加、最大リアポイントインデックス・キューが満杯である、すなわち、後部== MAXSIZEリアテールポインタが増加
- 以上で、-1後方にテールポインタ点の初期値は、それが第1のシフト(すなわち、後部++)の前に追加する必要がある場合、その後、後部を割り当てます
データを削除する場合:
- 最初のキューが空であるかどうかを判断しますか?
場合後部==前面(即ち、一番左の図)、すなわち空
- 空でないテールポインタは、すなわち、フロントのための操作を前面に移動します++
第三に、コードの実装
ジャワ
1 プライベート INT MAXSIZE; 2 専用 のint [] ARR; 3 プライベート INT フロント; 4 プライベート INT REAR; 5 // 構築機能 。6 パブリック ArrayQueue(INT arrMaxsize){ 7。 MAXSIZE = arrMaxsize; 8 ARR = 新しい新しい INT [MAXSIZE]; 9 -1 =フロント; 10 REAR = -1 ; 11 } 12は //の時間的配列かどうかを判定する 13は 公衆 ブールのisEmpty(){ 14 リターンフロント== REAR; 15 } 16 17 //は、アレイが満杯であるか否かを判断 18である パブリック ブールisFull(){ 19 リターン REAR - == MAXSIZE 1。; 20 } 21である 22である // データアレイを追加 23は、 公共 ボイド追加(INT N-){ 24 IF (isFull()){ 25 のSystem.out.println( "アレイが一杯になった" ;) 26が 返す; 27 } 28 REAR ++; 29 ARR [REAR] = N-; 30 } 31である // 配列データを削除し 32 公共 int型の削除(){ 33が IF (のisEmpty()){ 34は、 新しい新しいのRuntimeException( "アレイが空である" ); 35 } 36 フロント++ ; 37 [ 戻り; ARR [フロント] 38である } 39 40 //はデータヘッド取得 41は 公衆 INT getHeadDate(){ 42は IF {(のisEmpty()) 43である 新しい新規のRuntimeException( "空の配列を" )。 44は } 45 46である 戻り ARR [フロント+ 1 ]; 47 } 48 // すべてのデータを表示する 49 公共 ボイドallDate(){ 50 IF (のisEmpty()){ 51である 新しい新規のRuntimeException( "空の配列" ); 52 } 53 以下のために(int型 I 0 =; IはMAXSIZEを<; Iは++ ){ 54が System.out.printf( "ARR [D%] D =%の\のN-" 、I、ARR [I]); 55 } 56である 57ことです }
第四に、最適化
上記のコードは、空の位置データを削除し、一度だけ、アレイを発見され、環状キューを導入する問題を解決する必要がある、追加できません
キューが満杯であるかどうかの位置の予約:
キューの発見がいっぱいではありません後に取り出したとき、あなたは追加していくことができます。
コードの実装
1 プライベート INT MAXSIZE; 2 プライベート int型ARR []; 3 プライベート INTフロント; // デフォルト値はゼロである 4。 プライベート INT REAR; // デフォルト0 5。 6。 // 構築機能 7。 公共 CircleArray(INT arrMaxsize){ 8。 MAXSIZE = arrMaxsize ; 9 ARR = 新しい新しい INT [MAXSIZE]; 10 } 11 // 一時的アレイか否かを判断 12である パブリック ブールのisEmpty(){ 13は リターン REAR == ;フロント 14 } 15 16 // アレイが満杯であるか否かを判定する 。17 公共 ブールisFull(){ 18は リターン(リア+ 1)%MAXSIZE == フロント; 19 } 20は 21である // 追加データアレイ 22を 公共 ボイド追加(INT N-){ 23が IF (isFull()){ 24 のSystem.out.println( "配列が一杯である" ); 25 リターン; 26れる } 27 ARR [REAR] = N-; 28 = REAR(REAR + 1)%MAXSIZE; 29 } 30 // データアレイ削除 31は 公共 int型の削除(){ 32 IF (のisEmpty()){ 33で 新たな新規のRuntimeException( "空の配列" ); 34 } 35 // ローカル変数への最初のデータ値 36 のint A = ; ARR [フロント] 37 [ フロント=(フロント+ 1)%MAXSIZE; 38である 返す; 39 } 40 41である // データヘッド取得 42である 公共 INT getHeadDate(){ 43であり、 IF(のisEmpty()){ 44である 新しい新規のRuntimeException( "空の配列" ); 45 } 46である 47 リターンARR [フロント]; 48 } 49 // すべてのデータ表示 50 公共 ボイドallDateを(){ 51は、 IF (のisEmpty()) { 52は、 新たな新規のRuntimeException( "空の配列" ); 53れる } 54は、 55 のために(int型 I =フロントと、私は(フロント+サイズ<); Iは++ ){ 56が System.out.printf(「ARR [Dの%] =% D \ N-」、私は、ARRの%をMAXSIZE [I%MAXSIZE]); 57れます } 58 59 } 60 61である // 有効データ長、(MAXSIZEフロント+リア) %MAXSIZE 場合リア<前部、長さ(フロントMAXSIZE)+(REAR-0)の場合 62である 公共 int型のサイズ(){ 63が IF (のisEmpty ()){ 64 リターン 0 ; 65 } 66 リターン(フロントMAXSIZE + REAR)%MAXSIZE; 67 }