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

本文详细介绍了线性表的链式存储结构,重点讲解了单链表的概念,包括结点的描述、实现方式以及动态分配与释放。讨论了单链表的基本操作,如建立、查找、插入和删除,强调了操作的特性与时间复杂度,并提出了删除特定值或重复结点的变形问题。
最低0.47元/天 解锁文章
826

被折叠的 条评论
为什么被折叠?



