mirror of
https://github.com/krahets/hello-algo.git
synced 2025-12-16 03:59:18 +08:00
Update the captions of all the figures.
This commit is contained in:
@@ -2,9 +2,7 @@
|
||||
|
||||
「数组 Array」是一种将 **相同类型元素** 存储在 **连续内存空间** 的数据结构,将元素在数组中的位置称为元素的「索引 Index」。
|
||||
|
||||

|
||||
|
||||
<p align="center"> Fig. 数组定义与存储方式 </p>
|
||||

|
||||
|
||||
!!! note
|
||||
|
||||
@@ -102,9 +100,7 @@
|
||||
|
||||
**在数组中访问元素非常高效**。这是因为在数组中,计算元素的内存地址非常容易。给定数组首个元素的地址、和一个元素的索引,利用以下公式可以直接计算得到该元素的内存地址,从而直接访问此元素。
|
||||
|
||||

|
||||
|
||||
<p align="center"> Fig. 数组元素的内存地址计算 </p>
|
||||

|
||||
|
||||
```shell
|
||||
# 元素内存地址 = 数组内存地址 + 元素长度 * 元素索引
|
||||
@@ -241,7 +237,7 @@ elementAddr = firtstElementAddr + elementLength * elementIndex
|
||||
|
||||
**数组中插入或删除元素效率低下**。如果我们想要在数组中间插入一个元素,由于数组元素在内存中是“紧挨着的”,它们之间没有空间再放任何数据。因此,我们不得不将此索引之后的所有元素都向后移动一位,然后再把元素赋值给该索引。
|
||||
|
||||

|
||||

|
||||
|
||||
=== "Java"
|
||||
|
||||
@@ -299,7 +295,7 @@ elementAddr = firtstElementAddr + elementLength * elementIndex
|
||||
|
||||
删除元素也是类似,如果我们想要删除索引 $i$ 处的元素,则需要把索引 $i$ 之后的元素都向前移动一位。值得注意的是,删除元素后,原先末尾的元素变得“无意义”了,我们无需特意去修改它。
|
||||
|
||||

|
||||

|
||||
|
||||
=== "Java"
|
||||
|
||||
|
||||
@@ -8,9 +8,7 @@
|
||||
|
||||
链表的「结点 Node」包含两项数据,一是结点「值 Value」,二是指向下一结点的「指针 Pointer」(或称「引用 Reference」)。
|
||||
|
||||

|
||||
|
||||
<p align="center"> Fig. 链表定义与存储方式 </p>
|
||||

|
||||
|
||||
=== "Java"
|
||||
|
||||
@@ -314,7 +312,7 @@
|
||||
|
||||
**在链表中,插入与删除结点的操作效率高**。比如,如果我们想在链表中间的两个结点 `A` , `B` 之间插入一个新结点 `P` ,我们只需要改变两个结点指针即可,时间复杂度为 $O(1)$ ,相比数组的插入操作高效很多。
|
||||
|
||||

|
||||

|
||||
|
||||
=== "Java"
|
||||
|
||||
@@ -378,7 +376,7 @@
|
||||
|
||||
在链表中删除结点也很方便,只需要改变一个结点指针即可。如下图所示,虽然在完成删除后结点 `P` 仍然指向 `n2` ,但实际上 `P` 已经不属于此链表了,因为遍历此链表是无法访问到 `P` 的。
|
||||
|
||||

|
||||

|
||||
|
||||
=== "Java"
|
||||
|
||||
@@ -720,6 +718,6 @@
|
||||
}
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
<p align="center"> Fig. 常见链表类型 </p>
|
||||
|
||||
Reference in New Issue
Block a user