首页 理论教育 C语言程序设计-创建动态链表

C语言程序设计-创建动态链表

时间:2023-10-29 理论教育 版权反馈
【摘要】:建立如图8.12所示有3名学生数据的单向动态链表。程序内容如下:1/*这是一个有关于建立动态链表知识讲解的事例程序*/2#include<stdio.h>3#include<stdlib.h>4#define LEN sizeof5struct Student6{7long num;8float score;9struct Student*next;10};11int n;12struct Student*creat13{14struct Student*head,*p1,*p2;n=0;15p1=p2=malloc;16scanf;17head=NULL;18while(p1->num!最后建立一个新的指针pt,利用循环遍历动态链表,将全部结点中的数据显示出来。

C语言程序设计-创建动态链表

相对于静态链表的确定结点个数,动态链表则是没有确定的结点个数,是在程序执行过程中从无到有地建立起一个链表。

【例8.8】建立如图8.12所示有3名学生数据的单向动态链表。

程序内容如下:

1 /*这是一个有关于建立动态链表知识讲解的事例程序*/

2 #include<stdio.h>

3 #include<stdlib.h>

4 #define LEN sizeof(struct Student)

5 struct Student

6 {

7  long num;

8  float score;

9  struct Student*next;

10 };

11 int n;

12 struct Student*creat(void)

13 {

14  struct Student*head,*p1,*p2;n=0;

15  p1=p2=(struct Student*)malloc(LEN);

16  scanf("%ld,%f",&p1->num,&p1->score);

17  head=NULL;

18  while(p1->num!=0)

19  {

20   n=n+1;

21   if(n==1)

22    head=p1;

23   else

24    p2->next=p1;

25    p2=p1;(www.xing528.com)

26    p1=(struct Student*)malloc(LEN);

27   scanf("%ld,%f",&p1->num,&p1->score);

28  }

29  p2->next=NULL;

30  return(head);

31 }

32 int main()

33 {

34  struct Student*pt;

35  pt=creat();

36  while(pt!=NULL)

37  {

38   printf("\nnum:%ld\nscore:%5.1f\n",pt->num,pt->score);

39   pt=pt->next;

40  }

41  return 0;

42 }

程序结果如图8.14所示:

图8.14 例8.8程序结果图

【例题中关键问题说明】

(1)本程序用到第7章介绍的动态内存分配知识和有关函数(malloc、calloc、realloc、free)。

(2)定义了3个指针变量head、p1、p2,用来指向struct Student类型数据。

(3)先用malloc函数开辟第一个结点,并使p1和p2指向它,然后从键盘输入一个学生数据给第一个结点,使head也指向第一个结点.

(4)接着开辟第二个结点,使p1指向它,输入该结点数据,使第一个结点的next成员指向第二个结点,即连接第一个结点与第二个结点,使p2指向第二个结点。

(5)再开辟第三个结点让p1指向它,以此类推。在此设置学号不会为0,如果输入学号为0则表示链表建立结束。

(6)最后建立一个新的指针pt,利用循环遍历动态链表,将全部结点中的数据显示出来。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈