優先キュー
各要素を優先度にマークするために数値を割り当てると、コレクションと検索および削除で最優先要素にアクセスできるように、より小さな数値が優先度が高いこともあります。このようにして、優先キューなどのデータ構造を導入します。優先キューは、0以上の要素のコレクションであり、各要素には優先度があります。優先キューで実行される操作には、(1)検索(2)新しい要素(3)削除を挿入することが含まれます。一般に、検索操作は、最優先事項の要素を検索するために使用され、削除操作は要素の削除に使用されます。同じ優先順位を持つ要素の場合、それらはファーストイン順の順序または優先順位で処理できます。
Javaアレイシミュレーションキュー
キューは、テーブルのフロントエンドでの削除操作のみを許可し、テーブルのバックエンドに操作を挿入できる特別な線形テーブルです。挿入操作を実行するエンドはチームのテールと呼ばれ、削除操作を実行する終了はチームのヘッドと呼ばれます。これは、私たちがよく使用する最初のファーストアウト原則(FIFO)です。 Javaのリストは、キューとして使用できます。キューの最後に要素を追加する場合は、list.addメソッドを使用し、キューのヘッドから要素を削除する場合は、list.removeメソッドを使用します。
Javaアレイシミュレーション優先キュー構造の例:
パッケージデータストラクチャ。 java.util.arraysをインポートします。 java.util.comparatorをインポートします。 / ***アレイを使用して、優先度の高い最初のランクと最初のライン線形テーブル構造をシミュレートします。* Comparatorを使用したTreesetとTreemapに似ています*/ public Class SimulatePriorityQueue {public static void main(string [] args){simulatepriorityqueue queue = new simulatepriorityqueue(4); // simulatequeue queue = new SimulateQueue(); // system.out.println( "要素を取得する:" + queue.remove()); queue.insert(1); queue.insert(3); queue.insert(2); queue.insert(5); queue.insert(4); system.out.println( "size:" + queue.size()); system.out.println( "peek:" + queue.peek()); system.out.println( "要素を取り出す:" + queue.peek()); system.out.println( "要素を取得:" + queue.remove()); system.out.println( "要素を取得:" + queue.remove()); system.out.println( "extract要素:" + queue.remove()); // system.out.println( "抽出要素:" + queue.remove()); system.out.println( "size:" + queue.size()); System.out.println(); } private int msize = 3; // size private int [] marray; //配列private int mnextitem; //次の位置は、現在の要素の数と見なすことができますpublicepriorityQueue(){marray = new int [msize]; mnextitem = 0; } public SimulatePriorityQueue(int size){this.msize = size; marray = new int [msize]; mnextitem = 0; } / *** emster element* @param item* / public void insert(int item){if(!isfull()){marray [mnextitem ++] = item; for(int i = 0; i <mnextitem; i ++){// bubblestone for(int j = 0; j <mnextitem -1; j ++){if(marray [j]> marray [j + 1]){marray [j] = marray [j + 1] + 0 *(marray [j + 1] = marray [j]); system.out.println(arrays.tostring(marray)); }} system.out.println(arrays.toString(marray)); } else {system.out.println( "--------------"); }} / *** remotal element first-in first-out* @return* / public int remove(){if(!isempty()){return marray [ - mnextitem]; } else {新しいIllegalargumentException( "要素を取り出すことはできません"); }} / ***前の要素を確認* @return* / public int peek(){return marray [mnextitem -1]; } / *** empty* @return* / public boolean isempty(){return mnextitem == 0; } / ***それはfull* @return* / public boolean isfull(){return mnextitem == msize; } / ** * size * @return * / public int size(){return mnextitem; }}出力結果:
[1, 0, 0, 0][1, 3, 0, 0][1, 2, 3, 0][1, 2, 3, 0][1, 2, 3, 5]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------