离散存储[链表]
2) 结点之间通过指针相连
3) 首结点 没有前驱结点, 尾结点 没有后继结点
4) 每个结点(除首尾结点), 有且仅有一个前驱结点, 有且仅有一个后续结点
1)首结点
第一个有效结点
2)尾结点
最后一个有效节点
3)头结点
与首结点类型一致
第一个有效节点之前的结点
不存放有效数据
目的: 方便对链表的操作
4)头指针
指向 头结点 的指针变量
即存放 头结点的地址
5)尾指针
因为 尾结点 的指针域为 NULL
知道 一头一尾 即可确定一个链表
{
int data; // 数据域
struct Node * pNext; // 指针域
} NODE, * PNODE; // NODE <==> struct Node, PNODE<==>struct Node *
双链表
每个结点有两个指针域
2, 循环链表
能通过任何一个结点找到其他所有结点.
非循环链表
一, 连续 与 离散
如图 05-离散与连续.jpg
二, 定义
1, 什么是链表
1) n个结点离散分配2) 结点之间通过指针相连
3) 首结点 没有前驱结点, 尾结点 没有后继结点
4) 每个结点(除首尾结点), 有且仅有一个前驱结点, 有且仅有一个后续结点
2, 补充
如图 05-链表.jpg1)首结点
第一个有效结点
2)尾结点
最后一个有效节点
3)头结点
与首结点类型一致
第一个有效节点之前的结点
不存放有效数据
目的: 方便对链表的操作
4)头指针
指向 头结点 的指针变量
即存放 头结点的地址
5)尾指针
指向 尾结点 的指针变量
3, 确定一个链表
仅需要 头指针因为 尾结点 的指针域为 NULL
知道 一头一尾 即可确定一个链表
4, C语言中定义结点
typedef struct Node{
int data; // 数据域
struct Node * pNext; // 指针域
} NODE, * PNODE; // NODE <==> struct Node, PNODE<==>struct Node *
三, 分类
1, 单链表双链表
每个结点有两个指针域
2, 循环链表
能通过任何一个结点找到其他所有结点.
非循环链表
如图