我做了这个代码,以下在书中给出的函数"C中的数据结构基础",我做了下面的代码来实现一个简单的链表,但我似乎没有得到我错的地方,因为书中的代码应该是正确的:
#include<stdio.h>
#include<stdlib.h>
typedef struct node *listpointer;
typedef struct {
int data;
listpointer link;
} node;
void print(listpointer first)
{
while (first) {
printf("%dn",first->data);
first=first->link;
}
}
void addAtFront(listpointer *first,int n)
{
listpointer t=*first,temp;
temp=malloc(sizeof(node));
int i=1;
while (i <= n) {
t=t->link;
i++;
}
if(*first) {
temp->link=t->link;
temp->data=90;
t->link=temp;
}
else
{
*first=temp;
temp->link=NULL;
}
}
listpointer createList( )
{
listpointer first,second;
if(first=malloc(sizeof(node))) {
first->data=67;
if(second=malloc(sizeof(node))) {
second->data=65;
first->link=second;
second->link=NULL;
}
}
return first;
}
main( )
{
listpointer first=createList( );
addAtFront(&first,2);
print(first);
}
你有这个typedef:
typedef struct node *listpointer;
但是你从来没有定义过struct node
。但是,您有匿名struct
typedef
到node
的定义:
typedef struct {
int data;
listpointer link;
} node;
可能你的意思是:
typedef struct node {
int data;
listpointer link;
} node;
您定义的结构体没有标记,
typedef struct node *listpointer;
typedef struct {
int data;
listpointer link;
} node;
所以listpointer
应该指向的struct node
仍然是一个不完全类型。
你应该给结构体一个标签,
typedef struct node { ...
则listpointer
指向一个完整的对象类型
为什么我得到这个错误是因为我没有包含包含结构定义的头文件