4

基本的に、リンクされたリストの配列が必要で、各リンクされたリストには独自のヘッダーがあります。これは私のコードです:

struct node{
    int location;
    struct node *next;
    struct node *previous;
};

typedef struct ListHeader{
    nodeType *first;
    nodeType *current;
    nodeType *last;
} ListHeader;

struct adjList{
    ListHeader *header;
    int size;
};

struct List{
    adjListType *list;
    int size;
};

ListType newList(int numVerts){
    ListType new = malloc(sizeof(struct List));
    new->list = calloc(numVerts, sizeof(adjListType));
    new->size = numVerts;
    int i;
    for(i = 0; i <= numVerts; i++){
        new->list[i] = newAdjList();
    }
    return new;
}

adjListType newAdjList(void){
    adjListType new = malloc(sizeof(struct adjList));
    new->header = malloc(sizeof(ListHeader));
    new->header->first = NULL;
    new->header->current = NULL;
    new->header->last = NULL;
    new->size = 0; 
    return new;
}

nodeType newNode(int location){
    nodeType new = malloc(sizeof(struct node));
    new->location = location;
    return new;
}

このコード (ListType l, int location) を使用してリンク リスト内の次のノードに移動しようとすると、エラーが発生します。

l->list[location]->header->current = l->list[location]->header->current->next; 

これは私が得ているエラーです:

メンバー参照の基本型 'nodeType' (別名 'struct node*') は構造体または共用体ではありません

4

2 に答える 2

0

へのポインタの配列を作成しますstruct node。リンクされたリストの配列にはこれで十分です。

配列の各要素、つまりへのポインターstruct nodeはリストのヘッダーとして機能し、リストはその後要素をリストに追加/削除することで維持できます。

于 2013-05-24T07:59:58.847 に答える