单向链表的表示
与线性表(a1,a2,…,an)相应的单向链表由n个结点链接而成。每个数据元素对应链表中一个结点,数据元素ai相应的结点在单向链表中称为结点ai。结点ai中的数据域存储数据元素ai,指针域用于存放ai的直接后继元素ai+1相应结点的存储地址。链表中第一个结点的存储位置称为头指针,程序中通常用一个指针变量存储头指针。本章命名该指针变量为head。最后一个数据元素an没有直接后继,所以链表中最后一个结点的指针域存放的是空指针(NULL)。该单向链表如图2-4所示。
![717ea3c703049d83f86e962ba9c910a7.png](https://i-blog.csdnimg.cn/blog_migrate/0cdfe01d364b522ae023ad1a5380c00d.jpeg)
单向链表示意图
由单向链表的结构可知,只要已知头指针,就可以由前到后逐次访问到链表中任意一个结点。具体做法是由头指针出发,可以访问到第一个结点,由第一个结点的指针域可以访问到第二个结点,…,一般地,由第i个结点的指针域可以访问到第i+1个结点。
静态法建立链表
带注释的完整程序:#define NULL 0void main(){NODE a, b, c, d, *head, *p;a.data=3;b.data=5;c.data=8;d.data=2; /* 对结点的数据域(结构变量的data成员)赋值 */head=&a; /* a结点的起始地址赋值给头指针变量head */a.next=&b; /* b结点的起始地址赋值给a结点的指针域(结构变量的next成员)*/b.next=&c;c.next=&d;d.next=NULL; /* d是尾结点,把空指针赋值给d结点的指针域 (结构变量的next成员)*/p=head; /* 工作指针p指向结点a */do{printf("%d