mirror of
https://github.com/krahets/hello-algo.git
synced 2024-12-26 00:26:29 +08:00
Fix the docs of binary_search_tree and
graph_operations.
This commit is contained in:
parent
433997c38d
commit
fc70b1eb2c
3 changed files with 10 additions and 7 deletions
|
@ -4,8 +4,10 @@
|
||||||
|
|
||||||
- 数组和链表是两种基本的数据结构,分别代表数据在计算机内存中的两种存储方式:连续空间存储和分散空间存储。两者的特点呈现出互补的特性。
|
- 数组和链表是两种基本的数据结构,分别代表数据在计算机内存中的两种存储方式:连续空间存储和分散空间存储。两者的特点呈现出互补的特性。
|
||||||
- 数组支持随机访问、占用内存较少;但插入和删除元素效率低,且初始化后长度不可变。
|
- 数组支持随机访问、占用内存较少;但插入和删除元素效率低,且初始化后长度不可变。
|
||||||
- 链表通过更改引用(指针)实现高效的节点插入与删除,且可以灵活调整长度;但节点访问效率低、占用内存较多。常见的链表类型包括单向链表、循环链表、双向链表。
|
- 链表通过更改引用(指针)实现高效的节点插入与删除,且可以灵活调整长度;但节点访问效率低、占用内存较多。
|
||||||
- 动态数组,又称列表,是基于数组实现的一种数据结构。它保留了数组的优势,同时可以灵活调整长度。列表的出现极大地提高了数组的易用性,但可能导致部分内存空间浪费。
|
- 常见的链表类型包括单向链表、循环链表、双向链表,它们分别具有各自的应用场景。
|
||||||
|
- 列表是一种支持增删查改的元素有序集合,通常基于动态数组实现,其保留了数组的优势,同时可以灵活调整长度。
|
||||||
|
- 列表的出现大幅地提高了数组的实用性,但可能导致部分内存空间浪费。
|
||||||
|
|
||||||
### Q & A
|
### Q & A
|
||||||
|
|
||||||
|
|
|
@ -57,11 +57,12 @@
|
||||||
=== "删除顶点"
|
=== "删除顶点"
|
||||||
![adjacency_list_remove_vertex](graph_operations.assets/adjacency_list_remove_vertex.png)
|
![adjacency_list_remove_vertex](graph_operations.assets/adjacency_list_remove_vertex.png)
|
||||||
|
|
||||||
以下是基于邻接表实现图的代码示例。细心的同学可能注意到,**我们在邻接表中使用 `Vertex` 节点类来表示顶点**,而这样做是有原因的。
|
以下是邻接表的代码实现。对比上图,实际代码有以下不同。
|
||||||
|
|
||||||
1. 如果我们选择通过顶点值来区分不同顶点,那么值重复的顶点将无法被区分。
|
- 为了方便添加与删除顶点,以及简化代码,我们使用列表(动态数组)来代替链表。
|
||||||
2. 如果类似邻接矩阵那样,使用顶点列表索引来区分不同顶点。那么,假设我们想要删除索引为 $i$ 的顶点,则需要遍历整个邻接表,将其中 $> i$ 的索引全部减 $1$ ,这样操作效率较低。
|
- 使用哈希表来存储邻接表,`key` 为顶点实例,`value` 为该顶点的邻接顶点列表(链表)。
|
||||||
3. 因此我们考虑引入顶点类 `Vertex` ,使得每个顶点都是唯一的对象,此时删除顶点时就无须改动其余顶点了。
|
|
||||||
|
另外,我们在邻接表中使用 `Vertex` 类来表示顶点。这是因为如果与邻接矩阵一样用列表索引来区分不同顶点。那么假设想要删除索引为 $i$ 的顶点,则需要遍历整个邻接表,将所有大于 $i$ 的索引全部减 $1$ ,效率很低。而如果每个顶点都是唯一的 `Vertex` 实例,删除某一顶点之后就无须改动其他顶点了。
|
||||||
|
|
||||||
```src
|
```src
|
||||||
[file]{graph_adjacency_list}-[class]{graph_adj_list}-[func]{}
|
[file]{graph_adjacency_list}-[class]{graph_adj_list}-[func]{}
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
## 二叉搜索树的操作
|
## 二叉搜索树的操作
|
||||||
|
|
||||||
我们将二叉搜索树封装为一个类 `ArrayBinaryTree` ,并声明一个成员变量 `root` ,指向树的根节点。
|
我们将二叉搜索树封装为一个类 `BinarySearchTree` ,并声明一个成员变量 `root` ,指向树的根节点。
|
||||||
|
|
||||||
### 查找节点
|
### 查找节点
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue