This commit is contained in:
krahets 2023-04-06 22:04:07 +08:00
parent 49d81bca03
commit b1a2d8424d
3 changed files with 6 additions and 8 deletions

View file

@ -4,11 +4,9 @@ comments: true
# 4.2.   链表
!!! note "引言"
内存空间是所有程序的公共资源,排除已被占用的内存空间,空闲内存空间往往是散落在内存各处的。上节讲到,**存储数组的内存空间必须是连续的**,当我们需要申请一个非常大的数组时,系统不一定能够分配这么大的连续内存空间。
内存空间是所有程序的公共资源,排除已占用的内存,空闲内存往往是散落在内存各处的。我们知道,存储数组需要内存空间连续,当我们需要申请一个很大的数组时,系统不一定存在这么大的连续内存空间。而链表则更加灵活,不需要内存是连续的,只要剩余内存空间大小够用即可。
「链表 Linked List」是一种线性数据结构其中每个元素都是单独的对象各个元素一般称为结点之间通过指针连接。由于结点中记录了连接关系因此链表的存储方式相比于数组更加灵活系统不必保证内存地址的连续性。
相对地,链表则更加灵活,可以被存储到非连续的内存空间。「链表 Linked List」是一种线性数据结构其中每个元素都是单独的对象各个元素即结点之间通过指针连接。由于结点中记录了连接关系因此链表的存储方式相比于数组更加灵活系统可将结点分散在内存各处而不必保证内存地址的连续性。
链表的「结点 Node」包含两项数据一是结点「值 Value」二是指向下一结点的「指针 Pointer」或称「引用 Reference」

View file

@ -127,9 +127,9 @@ comments: true
```
结点的两个指针分别指向「左子结点 Left Child Node」和「右子结点 Right Child Node」,并且称该结点为两个子结点的「父结点 Parent Node」。给定二叉树某结点,将左子结点以下的树称为该结点的「左子树 Left Subtree」,右子树同理。
结点的两个指针分别指向「左子结点」和「右子结点」,并且称该结点为两个子结点的「父结点」。给定二叉树某结点,将左子结点及其以下结点形成的树称为该结点的「左子树」,右子树同理。
除了叶结点外,每个结点都有子结点和子树。例如,若将下图的「结点 2」看作父结点那么其左子结点和右子结点分别为「结点 4」和「结点 5」左子树和右子树分别为「结点 4 及其以下结点形成的树」和「结点 5 及其以下结点形成的树」
除了叶结点外,每个结点都有子结点和子树。例如,若将下图的“结点 2”看作父结点那么其左子结点和右子结点分别为“结点 4”和“结点 5”左子树和右子树分别为“结点 4 及其以下结点形成的树”和“结点 5 及其以下结点形成的树”
![父结点、子结点、子树](binary_tree.assets/binary_tree_definition.png)
@ -426,7 +426,7 @@ comments: true
### 完美二叉树
「完美二叉树 Perfect Binary Tree」的所有层的结点都被完全填满。在完美二叉树中所有结点的度 = 2 ;若树高度 $= h$ ,则结点总数 $= 2^{h+1} - 1$ ,呈标准的指数级关系,反映着自然界中常见的细胞分裂。
「完美二叉树 Perfect Binary Tree」的所有层的结点都被完全填满。在完美二叉树中叶结点的度为 $0$ ,其余所有结点的度都为 $2$ ;若树高度 $= h$ ,则结点总数 $= 2^{h+1} - 1$ ,呈标准的指数级关系,反映着自然界中常见的细胞分裂。
!!! tip

View file

@ -20,7 +20,7 @@ comments: true
### 算法实现
广度优先遍历一般借助「队列」来实现。队列的规则是“先进先出”,广度优先遍历的规则是 ”一层层平推“ ,两者背后的思想是一致的。
广度优先遍历一般借助「队列」来实现。队列的规则是“先进先出”,广度优先遍历的规则是“一层层平推”,两者背后的思想是一致的。
=== "Java"