リンクされたリストを使用してキューを作成したい。そのためのアルゴリズムは数多くあります。しかし、私が興味を持っているのは、相対優先度のキューを作成する方法です。
このタイプのキューには特別な名前があるかもしれませんが、私はそれを知りません.
とにかく、リストのノードを表すこの構造体があるとしましょう。
struct Node {
int value;
Node* next;
}
プライオリティ キュー (値が最小の要素が最初) を作成する場合、たとえば 5 7 1 8 2 を挿入すると、リストは次のようになります。
1 -> 2 -> 5 -> 7 -> 8
それを実装するのは本当に難しいことではありません。私がやりたいことは - 最初の要素を挿入するとき、他の要素は前の要素に相対的な値を持つべきです。したがって、私の例では、リスト/キューには次の値が含まれます。
1 -> 1 -> 3 -> 2 -> 1
どうやってそれを実装するのか本当にわかりませんか?次の考え方が当てはまるでしょうか。
ノード構造体に、元の値を表す別のフィールドを追加します。通常の連結リストを作成するときと同じ方法で、挿入するノードの位置を見つけて、次のように言います。
temp->value = temp->originalValue - previous->originalValue;