BST を使用してキューを実装するにはどうすればよいですか。
これがその方法ですか、すべてのノードに関連付けられたカウント値を維持しながらツリーにノードを挿入し続けますが、削除中はBSTはキュー(FIFO)のように機能するはずなので、カウントが最も低いノードでBSTから削除を開始しますツリーの値。
質問と解決策を正しく理解できましたか? そうでない場合は、質問を説明してください。
BST を使用してキューを実装するにはどうすればよいですか。
これがその方法ですか、すべてのノードに関連付けられたカウント値を維持しながらツリーにノードを挿入し続けますが、削除中はBSTはキュー(FIFO)のように機能するはずなので、カウントが最も低いノードでBSTから削除を開始しますツリーの値。
質問と解決策を正しく理解できましたか? そうでない場合は、質問を説明してください。
BST は実際には、キューをバックアップするために使用するのに不適切なデータ構造です。代わりに、リンクされたリストを使用する必要があります.
ただし、BST の使用を主張する場合は...
BST をプライオリティ キューとして使用し、アイテムがソートされる「キュー インデックス」も保持するラッパー タイプを定義します。ただし、現在のキュー インデックスを考慮して比較を定義する必要があります。そうしないと、インデックス タイプの最高値と最低値の差と同じ数のアイテムしか追加できないためです。
次のようなキューを持つことができます。
BST // to store data
pointer to head; // Points to the head of the Queue
pointer to tail // Points to the tail of the Queue
BST のノード構造体に、挿入の順序を表す別のノードへのポインターも追加します。
struct Node{
int x;
//left pointer
//right pointer
struct Node *next_queune_element;
}
挿入中 要素を追加する場合は、最初にポインターの末尾が指すノードにアクセスし、挿入したばかりの新しい要素 (BST ノード) を指すようにします。次に、テール ポインターを更新して、新しい要素を指すようにします。
削除中
要素を削除するときは、最初にヘッド ポインタが指すノードにアクセスnext_queune_element
し、補助一時変数に格納してノードを削除します。最後に、ヘッド ポインターが補助一時変数を指すようにします。
ここでは、バイナリ検索ツリーではなく、バイナリツリーが望ましいデータ構造になると思います。キューの実装にバイナリ ツリーを使用すると、関数型プログラミングを行うときに役立つ場合があります。プッシュ操作とポップ操作のたびに高さのバランスを保つ二分木を使用して実行できるため、常にO (log n ) になります。プッシュとポップは次のようになります。
どちらの場合も、リバランスは掲載順に違反しません。どちらも実装も簡単です。実際には、挿入機能が変更された AVL ツリーを使用しています。ボーナスは、要素が (完全に) 注文可能である必要がないことです。