0

二重にリンクされた 2 つのリストをマージする必要がありますが、それらの値ではありません (リストはソートされません)。2 つのすべてのノードを含む単一のリストを取得したいのですが、それらがメモリに表示される順序になっています。

たぶん、この画像がもっと役立ちます: http://img140.imageshack.us/i/drawing2.png/

この種のマージを実行できるアルゴリズム (できれば高速のアルゴリズム) はありますか? 多分これは少し役に立ちます:

  • リストの開始ノードは、常に他のノードの前にあります。
  • リストには最大 8192 個のノードを含めることができます。
  • リストはメモリの大きなブロック (メモリ アロケータで使用される) の空き場所を追跡するため、ノードがメモリ内のどこにあるかを知っています。
  • 私はC++で働いています。

前もって感謝します!

4

2 に答える 2

6

を使用していないように聞こえるstd::listので、一般的なソリューションを使用します。あなたの要件はリストをマージすることですが、メモリ内の物理的な場所の順序でノードを配置する必要があるためです。2 つのリストを追加して、ノードのアドレスでノードを並べ替えることができます。

リンクされたリストのソート アルゴリズムについては、 http : //www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.htmlを参照してください。

node1->value < node2->valueソートするときは、単に do (size_t)node1 < (size_t)node2、またはその性質に何かを比較する代わりに。

于 2009-06-16T15:02:29.417 に答える
2

ソートされたリストのみをマージでき、あなたのリストはソートされていないため、「マージ」はここでは少し誤解を招きます。

マージするのではなく、並べ替える必要があります。

ノードへのポインターをベクトルに入れます。ベクトルで std::sort を使用し、各ポインターを size_t にキャストする比較ファンクターを渡し (私は思う)、結果の数値を比較します。

次に、ベクトル内の結果の順序に従って、リンクされたリストを再配置できます。

于 2009-06-16T15:01:00.450 に答える