LV03-05-数据结构-线性表-单链表基础
本文主要是数据结构——单链表的基础知识相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。
点击查看使用工具及版本
Windows | windows11 |
Ubuntu | Ubuntu16.04的64位版本 |
VMware® Workstation 16 Pro | 16.2.3 build-19376536 |
SecureCRT | Version 8.7.2 (x64 build 2214) - 正式版-2020年5月14日 |
开发板 | 正点原子 i.MX6ULL Linux阿尔法开发板 |
uboot | NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03) |
linux内核 | linux-4.15(NXP官方提供) |
STM32开发板 | 正点原子战舰V3(STM32F103ZET6) |
点击查看本文参考资料
参考方向 | 参考原文 |
--- | --- |
链表,也可以说是链式存储结构,用于存储逻辑关系为 “一对一” 的数据。它与顺序表一样,都是线性表,但是与顺序表不同,链表不限制数据的物理存储状态,也就是说使用链表存储的数据元素,其物理存储位置是随机的。
一、存储结构
数据域:数据元素本身所在的位置。
指针域:指向直接后继元素的指针所在的位置。
节点:每个数据包含数据本身和指向后继元素的指针,叫做节点。
头节点:作为链表的第一个节点,它内部不存放数据,数据一般初始化为 0 ,对于链表,头节点不是必须的。
头指针:就是一个指针,它永远指向链表第一个节点的位置,主要用于指明链表的位置,便于后期找到链表并使用表中的数据。
二、优缺点
- 优点
(1)任意位置插入删除时间复杂度为O(1)。
(2)动态数据结构,可以根据需要申请空间而不需要提前给出大小。
- 缺点
(1)以节点为单位存储,不支持随机访问,访问时效率低下。
三、结构体实现
从存储结构来看,单链表的结构的结构体应该包含数据和指针,所以实现的结构体可以像这样定义:
1 | /* 自定义数据类型 */ |
当我们为创建的结构体类型进行重命名之后,我们就可以简化结构体变量的定义了。
常规写法 | 等价写法 |
---|---|
struct __node H; | _slinkednode H; |
struct __node * p; | _slinkedlink p; |
【说明】单链表英文名称为 single linked list ,这里就用 slinked 代表单链表啦。
四、框架实现
接下来我们需要搭建一个单链表的实现框架,它一共需要三个文件: slinkedlist.c 、 slinkedlist.h 和 main.c 。
1. slinkedlist.c
点击查看详情
1 | /** ===================================================== |
2. slinkedlist.h
点击查看详情
1 | /** ===================================================== |
3. main.c
点击查看详情
1 |
|
4. Makefile
点击查看详情
1 | ##============================================================================# |
5.编译测试
框架创建完毕后,可以在命令行输入以下命令进行测试,观察是否有报错,保证没有错误以便于后边相关操作的实现。
1 | make # 编译程序 |
上边的程序中由于功能还没实现,所以可能会有警告。