一. 链表结构
1. 什么是链表?
链表是存储数据方式,这种链表的储存方式叫做链式存储。链表存储方式是使得零碎的堆空间使用地址联系在一起。
2. 链表与数组区别?
1)从地址上区别
数组就是在栈空间中连续申请空间,使用变量间接访问空间。
例子: int A[3]; -> 申请空间
A[0] A[1] -> 使用变量A间接访问空间, 由于地址是连续的,A[0]不需要保存A[1]的地址,"&A[0]+1"就是&A[1]的地址。
链表就是使用保存下一个节点地址的方式使得零碎的堆空间联系在一起。
节点1 ---> 节点2 ---> 节点3
数据域 无效 int int
指针域 节点2的地址 节点3的地址 NULL -> 由于地址不连续,所以每一个节点都必须保存下一个节点的地址!
2)从存放数据大小范围区别
数组的空间必须前提声明好,并且访问数组时,不能越界,否则就警告!
链表的空间不需要提前声明,如果堆内存足够大,则链表的空间可以无限延伸下去。
二. 链表的种类
1. 什么是传统链表?
传统链表: 单向链表,单向循环链表,双向链表,双向循环链表 ----> 需要用户自己写增删该查的过程。
2. 什么是非传统链表?
非传统链表: 内核链表 -----> 增删改查过程已经在linux头文件中写好的了,用户直接调用即可。
3. 设计链表节点
由于链表节点需要数据域以及指针域(存放着不同类型的数据),所以将每一个节点设计成一个结构体。
结构体模型:
struct data{
/* 数据域 */
...
/* 指针域 */
...
};