1

私は、構造体に重点を置いた C99 のプログラムに取り組んできました。構造体のリンクされたリストを作成できることがわかり、試してみることにしました。

以下は、約 50 回作り直された惨めな試みであり、次のことを行うことを意図しています。

1) リンク リスト (CHAIN) の先頭を含む、main メソッドで BASE 型の構造体を作成します。

2) この BASE 構造体を別の関数に渡すと、追加の CHAIN 要素がリンク リストの末尾に追加されます。

3) リンクされたリストの要素を main に出力します。これは、変更が他の方法だけにあるのではないことを証明するものです。

#include <stdlib.h>
#include <stdio.h>
typedef struct Base {
    //many things
    struct Chain *head;
} BASE;

typedef struct Chain {
    int x;
    struct Chain *next;
} CHAIN;

void extendChain(BASE *Data, int length);

int main() {
    BASE Data;
    CHAIN *pointer;
    Data.head = 0;
    int length = 10; //userInput(); // gets integer
    extendChain(&Data, length);
    pointer = Data.head;
    while (pointer) {
        printf("%d\n", pointer->x);
        pointer = pointer->next;
    }
}

void extendChain(BASE *Data, int length) {
    CHAIN *position;
    position = Data->head;
    for (int i=0; i<length; ++i) {
        if (!Data->head) {
            // this will set the first value, the first time this is run.
            Data->head = malloc(sizeof(CHAIN));
            Data->head->x = -1; // set values here. Irrelevant.
            position = Data->head;
        } else if (position) {
            while (position->next) {
                position = position->next;
            }
            position = malloc(sizeof(CHAIN));
            position->next = 0;
            position->x = i; // placeholder
        }
    }
}

これはひどいことが判明し、私の例は理論的にも機能し始めていないことに気付きました (しかし、最善を尽くしました)。これを行う唯一の方法は、以前に成功した同じ方法ですべてを行うことであると考え始めていますが、これはすぐに面倒になり、方法は間違いなく最善です.

このリンクされたリストのヘッダーを含む構造体のみが渡されたときに、リンクされたリストに X 要素を追加する創造的な方法はありますか? いつものように、とても感謝しています。

4

2 に答える 2