アナログキューのアレイ

アナログキューのアレイ

  データキューを格納する構造体の配列を使用して宣言した場合は、それ自体が、順序付けられたリストであるキュー、キュー配列は以下の通りです。ここで、maxSizeのは、キューの最大容量です。

  出力キューので、このようにデータが記録されているように、フロント出力が変化する前方および後方キューインデックスの二つの変数前端と後端を必要と処理するために後端部からそれぞれ入力され、後部には、データの変化に応じて入力されます。図示のように:

  

  ストアデータキューが「addQueue」と呼ばれている場合は、addQueueプロセスは、2つの手順が必要です。分析を考えます:

    (1)尾ポインタが戻さ:+ 1、リア場合フロント==リア[空]

    キューのテール・ポインタが最大リア小規模maxSizeの-1未満である場合(2)、データは後にいう配列要素に格納されている、またはデータを格納することができません。リア== maxSizeの-1] [キューフル

  コードの実装:

  1  パブリック クラスArrayQueueDemo {
   2  
  3。     公共 静的 ボイドメイン(文字列[]引数){
   4。         // テスト
   5          // キューを作成する
  6。          ArrayQueueキュー= 新しい新しい ArrayQueue(3。   。7          文字キー= ''; //は、ユーザ入力を受信します
  8          スキャナスキャナ= 新しい新しいスキャナ(System.in);
   9          ブールループ= trueに10          
。11          // 出力メニュー
12は         、一方(ループ){
 13であります             System.out.println( "S(ショー):キューを表示する" );
 14              のSystem.out.println( "E(出口):プログラムを終了します" );
 15              のSystem.out.println(「A(追加):データを追加します。 "キューする);
 16              のSystem.out.println(" G(GET):キューから取られたデータ" );
 17。              のSystem.out.println(" H(ヘッド):「データキューヘッドを参照)、
 18である             
19。              キー=スキャナ。.next()のcharAt(0); // 文字受け
20がある             スイッチ(キー){
 21が             ケース 'S' 22である                 queue.showQueue();
 23である                 BREAK 24              ケース「」25                  のSystem.out.println( "番号を入力してください" );
 26は、                 INT =値; scanner.nextInt()
 27                  queue.addQueue(値);
 28                  BREAK ;
 29              ケース 'G' 30                  のtry {
 31は                     INT RES = キュー.getQueue();
 32                      System.out.printf( "抽出データDの%の\のN-" 、RES);
 33れる                  } キャッチ(例外E){
 34である                     のSystem.out.println(e.getMessage());
 35                  }
 36                 BREAK ;
 37 [              ケース 'H' 38である                 トライ{
 39                      INT RES = queue.headQueue();
 40                      ( "キューデータの先頭がD%\ N-ある" System.out.printf 、RES);
 41である                  } キャッチ(例外E) {
 42である                     のSystem.out.println(e.getMessage());
 43である                 }
 44れる             ケース 'E' 45                  scanner.close();
 46である                  ループ= falseに47                  BREAK ;
 48              デフォルト49                  BREAK ;
 50              }
 51である         }
 52である          のSystem.out.println( "プログラムの終了" );
 53      }
 54である 
55  }
 である56  
57である // 使用アナログキューアレイ- ArrayQueueクラス書き込む
58  クラスArrayQueue {
 59      プライベート INT maxSizeのを; // これは、アレイの最大容量を表す
60      プライベート INTフロントと、// ヘッドキューポイント
61は、     プライベート INT REAR; // テールキューにポイント
62である     プライベート INT ARR []。// このデータは、データを格納するために使用され、アナログ・キュー
 63は、 
64      // キューを作成するためのコンストラクタ
65      公的 ArrayQueue(INT arrMaxSize){
 66          maxSizeの= arrMaxSize;
 67          = ARR 新しい新しい INT [maxSizeの];
 68          フロント= -1; // キューのポインティングヘッド、キューのフロントヘッドの前の位置に解析点
69          REAR = -1; // キューのポインティング終了、データの最後にキュー・ポイント(即ち、キューが最後のデータである)
70      }
 71である 
72      // キューかフル
73は、     公共 ブールisFull(){
 74          リターン REAR maxSizeの== - 1;
 75      }
 76  
77      // キューが空であるか否かを判断する
78      パブリック ブールのisEmpty(){
 79          リターン REAR == フロント;
 80      }
 81  
82      // キューにデータを追加する
83      公共 ボイド addQueue(INT N-){
 84          // 分析キューいっぱいになった
85          場合(isFull()){
 86              のSystem.out.println( "キューがいっぱいになると、データが追加できません" );
 87              リターン;
 88          }
 89          REAR ++; //リアシフトさせた後
90          ARR [リア] = N-を、
 91である     }
 92  
93      // データキューを取得し、キュー
94      公衆 INT getQueue(){
 95          // キューか、空の
96          IF (のisEmpty()){
 97              // 例外がスローすることによって
98に             スローを 新しい新規のRuntimeException(「キューが空で、データを取ることができない」);
 99          }
 100          フロント++ ;
 101          リターンARR [フロント];
 102      }
 103  
104      //はすべてのデータキュー表示
105は     公衆 ボイドshowQueue(){
 106          // 反復
107を         IF (のisEmpty()){
 108              のSystem.out.println( "キューが空で、データなし" );
 109              リターン;
 110          }
 111  
112          のためのint型 I 0 =; I <arr.length; I ++ ){
 113              System.out.printf( "ARR [Dの%] D =%\ N-" 、I、ARR [I]);
 114          }
 115      }
 116  
117      // 表示データキューヘッド、データは削除されていない
1 18      パブリック INT headQueue(){
 119          IF (のisEmpty()){
120              スロー 新しい新規のRuntimeException( "キューが空で、データなし" );
 121          }
 122          リターン ARR [フロント+ 1 ];
 123      }
 124  
125 }
コードの表示

 

  分析と最適化:

    (1)現在のアレイは、一度使用することはできません再利用の効果を達成できませんでした。

    (2)環状アレイに修正されたアルゴリズムを使用して、このアレイ。

おすすめ

転載: www.cnblogs.com/niujifei/p/11550025.html