JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptでプライオリティキュー(PriorityQueue)の要素をピークする方法

PriorityQueueのpeek(ピーク)とは

プライオリティキュー(PriorityQueue)における「ピーク(peek)」とは、キュー内で最も優先度の高い値を、要素を取り除くことなく参照する操作のことです。dequeueのように要素を削除しないため、キューの状態を変えずに中身を確認したい場合に便利です。

それでは、peek関数を次のように実装してみましょう。

実装例

peek() {
    if (isEmpty()) {
        console.log("Queue Underflow!");
        return;
    }
    return this.container[this.container.length - 1];
}

この実装では、まずisEmpty()を使ってキューが空かどうかをチェックし、空の場合は「Queue Underflow!」というメッセージを表示して処理を終了します。空でない場合は、コンテナの末尾(最も優先度が高い位置)にある要素をそのまま返します。

動作確認

この関数が正しく動作しているかどうかは、以下のコードで確認できます。

let q = new PriorityQueue(4);
q.enqueue("Hello", 3);
q.enqueue("World", 2);
q.enqueue("Foo", 8);
console.log(q.peek());
q.display();

出力

上記のコードを実行すると、次のような出力が得られます。

{ data: 'Foo', priority: 8 }
[ { data: 'World', priority: 2 },
   { data: 'Hello', priority: 3 },
   { data: 'Foo', priority: 8 } ]

ご覧のとおり、peek()はdequeueとは異なり、先頭(優先度が最も高い)の値を削除せずにそのまま返すのが特徴です。出力結果を見ると、その後にdisplay()を実行してもキューには3つの要素が残っており、peek()によってキューの状態がまったく変化していないことがわかります。

なお、この実装では配列の末尾を参照するだけなので、peek操作の計算量はO(1)となり、非常に効率的です。キューの中身を頻繁に確認しながら処理を進めたい場合に、このpeek関数は役立ちます。

  1. JavaScriptでリンクリストに要素を挿入する方法をわかりやすく解説

    はじめに リンクリスト(連結リスト)では、指定した位置にデータを挿入するための関数 insert(data, position) を用意する必要があります。本記事では、その実装手順とサンプルコードを初心者にもわかるように解説します。 挿入処理の基本手順 insert(data, position) の内部では、以下のステップを実行します。 新しいノード(Node)を作成します。 リストが空かどうかを確認します。空の場合は、作成したノードをheadに設定して処理を終了します。 空でない場合は、currNode を使って挿入したい位置までリストをたどります。リンクリストの走査は「currNod

  2. JavaScriptで双方向連結リストの要素を削除する方法

    双方向連結リストから要素を削除する仕組み連結リストからの要素削除は非常にシンプルです。やるべきことは「削除したいノードへの参照を失わせる」こと、つまり対象ノードをリンクのチェーンから切り離すだけです。ただし、削除する位置によって処理が異なるため、次の3つのケースを考慮する必要があります。先頭(head)の要素を削除する: head = head.next と代入するだけで、先頭ノードへの参照は失われ、headは2番目の要素を指すようになります。このとき、新しいheadのprevをnullに設定し、前方向のリンクも忘れずに切っておきます。末尾(tail)の要素を削除する: 後ろから2番目のノード