C中链表的两个结构



好的,我正在为单链表创建一个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;
};

相关内容

  • 没有找到相关文章

最新更新