首页 理论教育C语言程序设计实用教程-链表概念简述

C语言程序设计实用教程-链表概念简述

【摘要】:在例7.8 中采用动态分配的办法为一个结构分配内存空间。某学生退学,可删去该结点,释放该结点占用的存储空间。这样一种连接方式,在数据结构中称为“链表”。其示意如图7.10 所示。图7.10链表示意图图7.10 中,head 是一个指针变量,存放第一个结点的首地址。链表中的每一个结点有同一种结构类型。例如一个存放学生学号和成绩的结点的结构如下:前两个成员项组成数据域,后一个成员项next 构成指针域,是一个指向stu 类型结构的指针变量。

在例7.8 中采用动态分配的办法为一个结构分配内存空间。每一次分配一块空间,用来存放一个学生的数据,可称为一个结点。有多少个学生就要分配多少块内存空间,也就是建立多少个结点。当然用结构体数组也可以完成上述工作,但是如果预先不能准确把握学生人数,就无法确定数组大小。而且当学生留级、退学后又不能释放该元素占用的空间。

用动态内存分配的方法就可以解决这些问题。有一个学生,分配一个结点,无须预先确定学生的人数。某学生退学,可删去该结点,释放该结点占用的存储空间。另外,用数组的方法必须占用连续内存区域,而使用动态分配时,各个结点之间可以不连续(结点内是连续的)。结点之间的联系,是用指针来实现,即在结点结构中定义一个成员项,用来存放下一结点的首地址,这个用于存放地址的成员称为指针域。

这样,在第一个结点的指针域存入第二个结点的首地址,在第二个结点的指针域存入第三个结点的首地址,如此串连下去直到最后一个结点。最后一个结点因无后续结点连接,指针域可赋以NULL。这样一种连接方式,在数据结构中称为“链表”。其示意如图7.10 所示。

图7.10 链表示意图(www.chuimin.cn)

图7.10 中,head 是一个指针变量,存放第一个结点的首地址。以下的结点分为两个域,一个是数据域,存放各种数据,譬如学号num,姓名name,性别sex 和成绩score 等;另一个是指针域,存放下一结点的首地址。链表中的每一个结点有同一种结构类型。例如一个存放学生学号和成绩的结点的结构如下:

前两个成员项组成数据域,后一个成员项next 构成指针域,是一个指向stu 类型结构的指针变量。