From 033dca77fec5d94b3d3ca962e6eb7085652c3eb2 Mon Sep 17 00:00:00 2001 From: krahets Date: Fri, 2 Jun 2023 01:29:48 +0800 Subject: [PATCH] Update the summary of array and linkedlist --- docs/chapter_array_and_linkedlist/summary.md | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/docs/chapter_array_and_linkedlist/summary.md b/docs/chapter_array_and_linkedlist/summary.md index b621998e..46f2fc9f 100644 --- a/docs/chapter_array_and_linkedlist/summary.md +++ b/docs/chapter_array_and_linkedlist/summary.md @@ -4,7 +4,7 @@ - 数组支持随机访问、占用内存较少;但插入和删除元素效率低,且初始化后长度不可变。 - 链表通过更改指针实现高效的节点插入与删除,且可以灵活调整长度;但节点访问效率低、占用内存较多。常见的链表类型包括单向链表、循环链表、双向链表。 - 动态数组,又称列表,是基于数组实现的一种数据结构。它保留了数组的优势,同时可以灵活调整长度。列表的出现极大地提高了数组的易用性,但可能导致部分内存空间浪费。 -- 下表总结并对比了数组与链表的各项特性。 +- 下表总结并对比了数组与链表的各项特性与操作效率。
@@ -14,6 +14,9 @@ | 数据结构长度 | 长度不可变 | 长度可变 | | 内存使用率 | 占用内存少、缓存局部性好 | 占用内存多 | | 优势操作 | 随机访问 | 插入、删除 | +| 访问元素 | $O(1)$ | $O(N)$ | +| 添加元素 | $O(N)$ | $O(1)$ | +| 删除元素 | $O(N)$ | $O(1)$ |
@@ -21,18 +24,6 @@ 在计算机中,数据读写速度排序是“硬盘 < 内存 < CPU 缓存”。当我们访问数组元素时,计算机不仅会加载它,还会缓存其周围的其他数据,从而借助高速缓存来提升后续操作的执行速度。链表则不然,计算机只能挨个地缓存各个节点,这样的多次“搬运”降低了整体效率。 -- 下表对比了数组与链表在各种操作上的效率。 - -
- -| 操作 | 数组 | 链表 | -| ------- | ------ | ------ | -| 访问元素 | $O(1)$ | $O(N)$ | -| 添加元素 | $O(N)$ | $O(1)$ | -| 删除元素 | $O(N)$ | $O(1)$ | - -
- ## Q & A !!! question "数组存储在栈上和存储在堆上,对时间效率和空间效率是否有影响?"