定义:
链式存储 :用一组任意的存储单元存储线性表中的数据元素。用这种方法存储的线性表简称线性链表。
存储链表中结点的一组任意的存储单元可以是连续的,也可以是不连续的,
甚至是零散分布在内存中的任意位置上的。
链表中结点的逻辑顺序和物理顺序不一定相同。
为了正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其直接后继结点的地址(或位置),
称为指针(pointer)或链(link),这两部分组成了链表中的结点结构,
链表是通过每个结点的指针域将线性表的n个结点按其逻辑次序链接在一起的。
每一个结只包含一个指针域的链表,称为单链表。
为操作方便,总是在链表的第一个结点之前附设一个头结点(头指针)head指向第一个结点。头结点的数据域可以不存储任何信息(或链表长度等信息)。
二 、结点的描述与实现
C语言中用带指针的结构体类型来描述 typedef struct Lnode { ElemType data; /*数据域,保存结点的值 */ struct Lnode *next; /*指针域*/ }LNode; /*结点的类型 */
结点的实现
结点是通过动态分配和释放来的实现,即需要时分配,不需要时释放。
实现时是分别使用C语言提供的标准函数:malloc() ,realloc(),sizeof() ,free() 。
最常用的基本操作及其示意图
⑴ 结点的赋值
1 LNode *p; 2 3 p=(LNode*)malloc(sizeof(LNode)); 4 5 p->data=20; p->next=NULL ;
⑵ 常见的指针操作