2

我制作了这段代码,按照“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("%d\n",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);
   }            
4

3 回答 3

6

你有这个typedef:

typedef struct node *listpointer;

但你从来没有定义struct node. 但是,您对匿名struct typedefed有以下定义node

typedef struct {
    int data;
    listpointer link;
} node;

可能你的意思是:

typedef struct node {
    int data;
    listpointer link;
} node;
于 2013-06-13T16:58:35.743 回答
5

您定义没有标签的结构,

typedef struct node *listpointer;

typedef struct        {

int data;
listpointer link;
}  node;

所以struct nodealistpointer应该指向的仍然是一个不完整的类型。

你应该给结构一个标签,

typedef struct node { ...

然后listpointer指向一个完整的对象类型。

于 2013-06-13T16:58:04.773 回答
0

为什么我得到这个错误是因为我没有包含包含结构定义的头文件。

于 2014-02-17T23:05:12.987 回答