0

私はCでリンクリストを扱っていますが、私のプログラムは実際には同時に多数のリンクリストを必要とするため、新しいノードを追加したいときは、追加するリストを決定する必要があります.追加する目的のリストの先頭ですが、「add_node」関数をどのように記述すればよいか少し混乱しています。なぜなら、ヘッドノードは毎回同じではなく、「スイッチケース」を使用したくないからです。非常に長い...よろしくお願いします

void add_it(int *array)
{
    head=which_head(array);
    curr = malloc(sizeof (node));
    memcpy(curr->nconn, array, sizeof (curr->nconn));
    curr->next = ?????????;
    ???????=curr
}
4

3 に答える 3

0

リンクされたリストのヘッドを配列に保持するか、別のリンクされたリストに保持することができます。リンクされたリスト関数を一般的なものにして、複数のリストを処理するコードを作成しないように伝えます。特定のリンク リストにノードを追加する必要がある場合は、関数を使用して配列/リンク リストからノードをフェッチし、返されたヘッド ポインターを一般的なリンク リスト関数に使用できます。したがって、マルチヘッドの問題を処理するための追加のコードをリンク リスト ルーチンの外部に保持できます。

于 2013-07-23T04:09:26.327 に答える
0

私があなたの質問を正しく理解している場合、それぞれに異なるヘッダーを持ついくつかのリンクリストが必要です。ここで、すべてのリンクリストに同じ方法でアクセスしたいと考えています。

私の解決策は、なぜあなたは試さなかったのですHash Tableか?

Hash Table を試すと、解決策が得られます。

于 2013-07-23T05:34:00.347 に答える
0
struct Node
{
    Node *next;
    int   myData[80];
};

Node **which_head(some params);

void Add(some data)
{
    Node **head_location = whitch_head(...);
    Node *new_element = (Node*)malloc(...);

    new_element->next = *head_location;
    *head_location = new_element;
}

トリックは、which_head()関数がリストの最初の要素へのポインターではなく、ヘッドの位置を返す必要があることです。

于 2013-07-23T02:37:59.497 に答える