#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define N 10
typedef struct node
{char name[20];
struct node *link;
}stud;
stud * create(int n)
{
stud *p,*h,*s;
int i;
if((h=(stud *)malloc(sizeof(stud)))==NULL)
{printf("分配内存空间失败!");
exit(0);
}
h->name[0]='';
h->link=NULL;
p=h;
for(i=0;i<n;i++)
{if((s=(stud *)malloc(sizeof(stud)))==NULL)
{printf("分配空间失败!");
exit(0);
}
p->link=s;
printf("请输入第%d个人的名字",i+1);
scanf("%s",s->name);
s->link=NULL;
p=s;
}
return(h);
}
stud * search(stud *h,char *x)
{stud *p;
char *y;
p=h->link;
while(p!=NULL)
{y=p->name;
if(strcmp(y,x)==0)
return(p);
else p=p->link;
}
if(p==NULL)
printf("未能找到该数据!");
}
void main()
{int number;
char fullname[20];
stud *head,*searchpoint;
number=N;
head=create(number);
printf("请输入要查找的人的姓名:");
scanf("%s",fullname);
searchpoint=search(head,fullname);
}
1.我不明白这个程序为什么使用那么多的*p,*h,*s 指来指去的;
2.stu * create()这里为什么* 不是和create连在一起的?
3.typedef struct node里面怎么又有一个struct node *link?
4.调试结果是exit(0)错误:error C2065: 'exit' : undeclared identifier。为什么这样?我是从书上COPY的。
我的指针学的还可以,但是就是看不懂为什么动态链表会是这样写,谁能帮我理解这个程序的至少可以再加30分,谢谢!
2 stu * create() creat e是带回一个指针的函数,该指针指向STU数据
stu (* create)() creat e是指向函数的指针,该函数返回一个STU值
判断是返回是什么型的值就看return后面跟了什么型的变量,才决定函数的类型。
3 一个节点包括数据域和指针域 ,链表的数据结构,必须利用指针变量才能实现。只要
保证降下一个节点的地址放到前一个节点的成员link中即可。从这也可以看出链表与数组存取数据
的不同。这里是很灵活的,指针要在实际的数据结构中才能真正的体现出强大,这也是C语言的精华所在,难学的地方。
4 这个可能是编译器的问题 ,不是有错。像在TC中编译只发现#include<malloc.h>错误,并没有你说的错误,删掉就正确,可能是TC不支持这个库函数。我查了下书,ANSI标准建议在"stdlib.h"头文件中包含有关信息,但许多C编译要求用"malloc.h"而不是"stdlib.h"。这个要多上机去调试。