一个简单的动态链表。
1 #include <stdio.h>
2 #include <malloc.h> /*包含动态内存分配函数的头文件*/
3 #define N 10 /*N为人数*/
4
5 typedef struct node {
6 char name[20];
7 struct node *link;
8 }stud;
9
10 stud * creat(n){ /*建立单链表的函数,形参n为人数*/
11 stud *p,*h,*s; /* *h保存表头结点的指针,*p指向当前结点的前一个结点,*s指向当前结点*/
12 int i; /*计数器*/
13 if((h =(stud *)malloc(sizeof(stud))) == NULL){ /*分配空间并检测*/
14 printf("不能分配内存空间");
15 return NULL;
16 }
17 h->name[0]='\0'; /*把表头结点的数据域置空*/
18 h->link=NULL; /*把表头结点的链域置空*/
19 p=h; /*p指向表头结点*/
20 for(i=0;i<n;i++){
21 if((s =(stud *)malloc(sizeof(stud))) == NULL){
22 printf("不能分配内存空间!");
23 return NULL;
24 }
25 p->link=s; /*把s的地址赋给p所指向的结点的链域,这样就把p和s所指向的结点连接起来了*/
26 printf("请输入第%d个人的姓名",i+1);
27 scanf("%s",s->name); /*在f当前结点s的数据域中存储姓名*/
28 s->link=NULL;
29 p=s;
30 }
31 return h;
32 }
33 void main(){
34 int number;
35 stud *head; /*head是保存单链表的表头结点地址的指针*/
36 number =N; /*把所新建的单链表表头地址赋给head*/
37 head =creat(number);
38 do
39 {
40 head = head->link;
41 printf("名字是:%s \n",head->name);
42 }
43 while(head->link !=NULL);
44 }
2 #include <malloc.h> /*包含动态内存分配函数的头文件*/
3 #define N 10 /*N为人数*/
4
5 typedef struct node {
6 char name[20];
7 struct node *link;
8 }stud;
9
10 stud * creat(n){ /*建立单链表的函数,形参n为人数*/
11 stud *p,*h,*s; /* *h保存表头结点的指针,*p指向当前结点的前一个结点,*s指向当前结点*/
12 int i; /*计数器*/
13 if((h =(stud *)malloc(sizeof(stud))) == NULL){ /*分配空间并检测*/
14 printf("不能分配内存空间");
15 return NULL;
16 }
17 h->name[0]='\0'; /*把表头结点的数据域置空*/
18 h->link=NULL; /*把表头结点的链域置空*/
19 p=h; /*p指向表头结点*/
20 for(i=0;i<n;i++){
21 if((s =(stud *)malloc(sizeof(stud))) == NULL){
22 printf("不能分配内存空间!");
23 return NULL;
24 }
25 p->link=s; /*把s的地址赋给p所指向的结点的链域,这样就把p和s所指向的结点连接起来了*/
26 printf("请输入第%d个人的姓名",i+1);
27 scanf("%s",s->name); /*在f当前结点s的数据域中存储姓名*/
28 s->link=NULL;
29 p=s;
30 }
31 return h;
32 }
33 void main(){
34 int number;
35 stud *head; /*head是保存单链表的表头结点地址的指针*/
36 number =N; /*把所新建的单链表表头地址赋给head*/
37 head =creat(number);
38 do
39 {
40 head = head->link;
41 printf("名字是:%s \n",head->name);
42 }
43 while(head->link !=NULL);
44 }