上一篇讲了线性表中的线性存储,改文章学习一下线性表的链式存储结构。
链式存储:一组任意的存储单元来存储数据,而不必须是连续的存储的单元。因此为了正确表示数据间的逻辑关系,除了数据域域外,我们还需要一个指针域。
当一个节点只包含一个指针域的时候,该指针指向数据的后继节点,我们称为单链表。如下图所示:
data | *next |
一般单链表的第一个节点之前有一个头结点,head节点,该节点可以不存储任何数据信息。所以单链表是由头结点唯一确定的,因此可以用头指针来表示单链表。下面看一下单链表的逻辑结构和物理结构:
C语言中对该结构的抽象定义为:
typedef struct LNode {
ElemType data;
struct LNode *next;
} LNode;
使用的时候,需要动态申请内存和动态释放内存:
LNode *p = (LNode *)malloc(sizeof(LNode));
p->data = 10; p->next=NULL;
free(p);
下面图示是一些常见的链表指针操作,请作参考:
这些操作都比较经典,后续的一些链表的增删改查基本算法中都有涉及。