アレイ動作モードキュー

 

   

キュー紹介

 我々はスーパーマーケットを支払う場合は、最初の行は、キューの機能がある(除外キューをジャンプ)は、常に最初の支払いが完了している「先入れ先出しで、ポストの最後の」

機能

  • キューは、順序付きリストで、配列やリンクリストを介して達成することができます
  • 「先入れ先出しで、後に後方アウトの原則」をフォロー
  • 配列を表すキューは、データは常にトップアウトデータで、底部に挿入され、図

      

 

 

 

第二に、シミュレーションアレイコホート分析

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      }

 

おすすめ

転載: www.cnblogs.com/han200113/p/11526956.html