44 lines
1019 B
Markdown
44 lines
1019 B
Markdown
# 数据结构
|
||
|
||
## 架构梳理
|
||
|
||
- 线性(1:1)
|
||
|
||
- 线性表
|
||
|
||
- 顺序存储 --> arr
|
||
|
||
- 链式存储 --> 指针 (有头,无头)
|
||
|
||
有头是指有一个不存数据的头,始终作为这个链表的起点。
|
||
|
||
会更加简单,无头的话,更改首部节点会麻烦。
|
||
|
||
头节点不仅可以作为起点,还可以作为存储信息的仓库,因为头节点只有*next是必须的。
|
||
|
||
- 单链表
|
||
- 循环
|
||
- 不循环
|
||
|
||
- 双向链表
|
||
|
||
`lib`四个版本,第一个最基础完善,第二个改成了变长结构体,第三个在第二个的基础上封装了函数指针,第四个在第二个的基础上隐藏了数据结构,只暴露接口。
|
||
|
||
- 循环
|
||
- 不循环
|
||
|
||
学到这里可以去读一下内核有关**list**的实现,主要都是宏和内联函数。
|
||
|
||
- 栈
|
||
|
||
- 队列
|
||
|
||
- 树状(1:N)
|
||
|
||
**递归**。**递归**转**非递归**。
|
||
|
||
- 图(N:M)
|
||
|
||
|
||
|