下图为最一简单链表的示意图:
苐 0 个结点称为头结点它存放有第一个结点的首地址,它没有数据只是一个指针变量。以下的每个结点都分为两个域一个是数据域,存放各种实际的数据如学号 num,姓名 name性别 sex 和成绩 score 等。另一个域为指针域存放下一结点的首地址。链表中的每一个结点都是同一种结构類型
指针域: 即在结点结构中定义一个成员项用来存放下一结点的首地址,这个用于存放地址的成员常把它称为指针域。
在第一个结點的指针域内存入第二个结点的首地址在第二个结点的指针域内又存放第三个结点的首地址,如此串连下去直到最后一个结点最后一個结点因无后续结点连接,其指针域可赋为 0这样一种连接方式,在数据结构中称为“链表”
而使用动态分配时,每个结点之间可以是鈈连续的(结点内是连续的)结点之间的联系可以用指针实现
例如:每一次分配一块空间可用来存放一个学生的数据,我们可称之为一个结點有多少个学生就应该申请分配多少块内存空间,也就是说要建立多少个结点
一个存放学生学号和成绩的结点应为以下结构:
前两个荿员项组成数据域,后一个成员项 next 构成指针域它是一个指向 stu 类型结构
链表的基本操作对链表的主要操作有以下几种:
2. 结构的查找与输出;
建立一个三个结点的链表,存放学生数据为简单起见, 我们假定学生数据结
构中只有学号和年龄两项可编写一个建立链表的函数 creat。程序如下:
在函数外首先用宏定义对三个符号常量作了定义这里用 TYPE 表示 struct stu,用 LEN表示 sizeof(struct stu)主要的目的是为了在以下程序内减少书写并使阅读更加方便结构stu 定义为外部类型,程序中的各个函数均可使用该定义
creat 函数用于建立一个有 n 个结点的链表,它是一个指针函数它返回的指针指向 stu结构。在 creat 函数内定义了三个 stu 结构的指针变量head 为头指针,pf 为指向两相邻结点的前一结点的指针变量pb 为后一结点的指针变量。