BohYoh.comトップページへ

Javaによるアルゴリズムとデータ構造

戻る  

演習4-5の解答

 クラスIntQueue に、任意のデータを探索する以下のメソッドを追加せよ。
  int search (int x )
メソッドindexOf のように見つけた位置の配列のインデックスを返すのではなく、キュー内で何番目に存在するのかを正の整数値(キューの先頭であれば1とする)で返し、探索に失敗した場合は0を返すこと。
Fig.4-15の例であれば、35を探索すると1を、50を探索すると2を、99を探索すると0を返すことになる。

// 演習4-5 // int型キュー(探索メソッドindexOfを追加) class IntQueue {     //--- 実行時例外:キューが空 ---//     public class EmptyIntQueueException extends RuntimeException {         public EmptyIntQueueException() { }     }     //--- 実行時例外:キューが満杯 ---//     public class OverflowIntQueueException extends RuntimeException {         public OverflowIntQueueException() { }     }     int    max;        // キューの容量     int    num;        // 現在のデータ数     int    front;        // 先頭要素カーソル     int    rear;        // 末尾要素カーソル     int[] que;        // キューの本体     //--- コンストラクタ ---//     IntQueue(int capacity) {         num = front = rear = 0;         max = capacity;         try {             que = new int[max];            // キュー本体用の配列を生成         catch (OutOfMemoryError e) {    // 生成できなかった             max = 0;         }     }     //--- キューにデータをエンキュー ---//     int enque(int xthrows OverflowIntQueueException {         if (num >= max)             throw new OverflowIntQueueException();            // キューは満杯         que[rear++= x;         num++;         if (rear == max)             rear = 0;         return x;     }     //--- キューからデータをデキュー ---//     int deque() throws EmptyIntQueueException {         if (num <= 0)             throw new EmptyIntQueueException();            // キューは空         int x = que[front++];         num--;         if (front == max)             front = 0;         return x;     }     //--- キューからデータをピーク(先頭データを覗く) ---*/     int peek() throws EmptyIntQueueException {         if (num <= 0)             throw new EmptyIntQueueException();            // キューは空         return que[front];     }     //--- キューからxを探してインデックス(見つからなければ-1)を返す ---//     int indexOf(int x) {         for (int i = 0; i < num; i++)             if (que[(i + front% max]  == x)            // 探索成功                 return i + front;         return -1;                                        // 探索失敗     }     //--- キューからxを探して先頭から何番目か(見つからなければ-1)を返す ---//     int search(int x) {         for (int i = 0; i < num; i++)             if (que[(i + front% max]  == x)            // 探索成功                 return i + 1;         return -1;                                        // 探索失敗     }     //--- キューを空にする ---//     void clear() {         num = front = rear = 0;     }     //--- キューの容量を返す ---//     int capacity() {         return max;     }     //--- キューに蓄えられているデータ数を返す ---//     int size() {         return num;     }     //--- キューは空であるか ---//     boolean isEmpty() {         return num <= 0;     }     //--- キューは満杯であるか ---//     boolean isFull() {         return num >= max;     }     //--- キュー内の全データを先頭→末尾の順に表示 ---//     void dump() {         if (num <= 0)             System.out.println("キューは空です。");         else {             for (int i = 0; i < num; i++)                 System.out.print(que[(i + front% max" ");             System.out.println();         }     } }


戻る