C语言 链表的数组,移动到下一个节点错误;



基本上我想要一个链表数组,每个链表有它自己的头。这是我的代码:

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 1, int location)

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

这是我得到的错误:

成员引用基类型'nodeType'(又名'struct node*')不是结构或联合

如果你想要链表数组,为什么要使用指针?

struct List{
    adjListType list[10];
    int size;
};

当然你也可以使用指针,但是你需要告诉我们你是如何使用calloc分配数组内存的?


根据更新后的代码…以下是错误固定行…

ListType newList(int numVerts){
    ListType new = malloc(sizeof(struct List));
    new->list = calloc(numVerts, sizeof(struct adjListType));//Here you missed struct
    new->size = numVerts;
    int i;
    for(i = 0; i < numVerts; i++){ // Here <= instead of < for 10 length array is 0 to 9
        new->list[i] = newAdjList();
    }
    return new;
}

Also你可能想要返回&new作为引用,否则你最终会创建不必要的副本…

我要去你的代码,并将更新这个答案,如果我发现任何其他…同时,如果你能告诉我们你得到了什么误差,那就太好了。

同样在您显示的代码中,您将nextprevcurrent设置为NULL,但是您正在更改这些值…否则你会一直得到NULL POINTER EXCEPTION

创建一个指向struct node的指针数组。对于一个链表数组来说,这应该足够了。

数组的每个元素,即指向struct node的指针将作为列表的头,列表可以通过随后从列表中添加/删除元素来维护。

相关内容

  • 没有找到相关文章

最新更新