4

オペレーティング システムのプロセス スケジューラをシミュレートするコンピューター サイエンス プロジェクトを行っています。複数の片方向リストがあり、それらの間でノードを移動する必要があります。これを達成するための一般的な関数を作成しようとしていますが、ポインターを使用する私の弱点が妨げになっていると思います。

目的の機能を実装するにはどうすればよいですか? これまでのところ、次のものがあります。

typedef struct process_list_struct ProcessList;

struct process_list_struct
{
    Process proc;
    ProcessList* next;
};

void change_lists(ProcessList* node, ProcessList* newlist)
{
    ProcessList* temp = NULL;
    debug_printf("change_lists reached\n");
    temp = node;
    if(!node)
    {
        debug_printf("Error: change_lists failed!\n");
        return;
    }
    node = node->next;
    temp->next = newlist;
    newlist = temp;
    return;
}

結果は奇妙です...移動したいノードのみを含む最初のリストになり、他のすべてが欠落しています(私が望んでいたものとはほとんど逆の効果です)、newlist(空で始まるとテストされた)は空のままです。

私は単一のリストでノードスワップの実装を調べ、代わりに二重ポインターを使用する人を見てきましたが、それは本当に私を混乱させます. この場合、誰かがそれらを適用する方法を教えてもらえますか? 私はそれらを使用してみましたが、構造体のポインター要素を参照することと組み合わせると、非常に混乱しました。

大変助かりました!

4

4 に答える 4

0

あなたのプロトタイプは間違っていると思います。単純すぎます。

どのノードがリストの開始と見なされるかを後で変更する機能がなければ、片方向リストのノードを移動することはできません。

そうでなければ、最初のノードを移動するとどうなりますか? 周囲のコードはポインターを保持しますが、ノードは論理的に移動先リストの一部になり、すべてが壊れています。

また、移動先リストにも同じことが当てはまります。移動前に空の場合はどうなるでしょうか。

于 2013-04-09T15:10:18.973 に答える