好的,我正在为单链表创建一个ADT。我有一个结构名称列表,它存储指向第一个节点(列表中的第一个项,也是一个结构)和大小的指针。该节点存储第一个名称和指向下一个节点的指针。以下是结构:
typedef struct List *ListP;
struct List{
ListP head;
int size;
};
struct node{
char name[20];
nodeP next;
};
首先,我调用malloc为structList:提供内存
ListP newList;
newList = malloc(sizeof(struct List)); //should I typecast this to (ListP *)?
if (newList == NULL){
fprintf(stderr, "Memory allocation failed");
}
else{
newList->head = NULL;
newList->size = 0;
}
然后我再次调用malloc,给我第一个节点的内存:
struct node *new;
newNode = malloc(sizeof(struct node));
if (newNode == NULL){
fprintf(stderr, "Memory allocation failed");
}
else{
newNode->name = 'Jay';
newNode->next = NULL;
现在我有了我的List和一个新节点,我将List->head分配到新节点的地址;
newList->head=newNode;
直到这一次编译器都没有抱怨。但是,当我尝试使用列表的指针访问第一个节点中的元素时:
name = newList->head->name;
编译器抱怨结构列表没有名为"name"的成员
假设我只有指向structList的指针,并且List->head指向第一个节点,我如何访问structnode中的字段。如有任何帮助,我们将不胜感激。
您将head声明为ListP
,而假定NodeP是节点*,则head的类型应为NodeP
。
尽量与名字保持一致。以下是一个建议的修订版:
// forward declarations
struct List;
struct Node;
typedef struct List *ListP;
typedef struct Node *NodeP;
struct Node{
char name[20];
NodeP next;
};
struct List{
NodeP head;
int size;
};