Fig. 函数的渐进上界
+Fig. 函数的渐近上界
-本质上看,计算渐进上界就是在找一个函数 $f(n)$ ,**使得在 $n$ 趋向于无穷大时,$T(n)$ 和 $f(n)$ 处于相同的增长级别(仅相差一个常数项 $c$ 的倍数)**。 +本质上看,计算渐近上界就是在找一个函数 $f(n)$ ,**使得在 $n$ 趋向于无穷大时,$T(n)$ 和 $f(n)$ 处于相同的增长级别(仅相差一个常数项 $c$ 的倍数)**。 !!! tip - 渐进上界的数学味儿有点重,如果你感觉没有完全理解,无需担心,因为在实际使用中我们只需要会推算即可,数学意义可以慢慢领悟。 + 渐近上界的数学味儿有点重,如果你感觉没有完全理解,无需担心,因为在实际使用中我们只需要会推算即可,数学意义可以慢慢领悟。 ## 推算方法 -推算出 $f(n)$ 后,我们就得到时间复杂度 $O(f(n))$ 。那么,如何来确定渐进上界 $f(n)$ 呢?总体分为两步,首先「统计操作数量」,然后「判断渐进上界」。 +推算出 $f(n)$ 后,我们就得到时间复杂度 $O(f(n))$ 。那么,如何来确定渐近上界 $f(n)$ 呢?总体分为两步,首先「统计操作数量」,然后「判断渐近上界」。 ### 1. 统计操作数量 @@ -416,7 +416,7 @@ $$ ``` -### 2. 判断渐进上界 +### 2. 判断渐近上界 **时间复杂度由多项式 $T(n)$ 中最高阶的项来决定**。这是因为在 $n$ 趋于无穷大时,最高阶的项将处于主导作用,其它项的影响都可以被忽略。 @@ -1330,7 +1330,7 @@ $$ - 当 `nums = [?, ?, ..., 1]`,即当末尾元素是 $1$ 时,则需完整遍历数组,此时达到 **最差时间复杂度 $O(n)$** ; - 当 `nums = [1, ?, ?, ...]` ,即当首个数字为 $1$ 时,无论数组多长都不需要继续遍历,此时达到 **最佳时间复杂度 $\Omega(1)$** ; -「函数渐进上界」使用大 $O$ 记号表示,代表「最差时间复杂度」。与之对应,「函数渐进下界」用 $\Omega$ 记号(Omega Notation)来表示,代表「最佳时间复杂度」。 +「函数渐近上界」使用大 $O$ 记号表示,代表「最差时间复杂度」。与之对应,「函数渐近下界」用 $\Omega$ 记号(Omega Notation)来表示,代表「最佳时间复杂度」。 === "Java" diff --git a/docs/chapter_data_structure/classification_of_data_strcuture.assets/classification_logic_structure.png b/docs/chapter_data_structure/classification_of_data_strcuture.assets/classification_logic_structure.png index 3158e6a79..7375e43c3 100644 Binary files a/docs/chapter_data_structure/classification_of_data_strcuture.assets/classification_logic_structure.png and b/docs/chapter_data_structure/classification_of_data_strcuture.assets/classification_logic_structure.png differ diff --git a/docs/chapter_data_structure/classification_of_data_strcuture.assets/classification_phisical_structure.png b/docs/chapter_data_structure/classification_of_data_strcuture.assets/classification_phisical_structure.png index 697627b41..29ef8bb22 100644 Binary files a/docs/chapter_data_structure/classification_of_data_strcuture.assets/classification_phisical_structure.png and b/docs/chapter_data_structure/classification_of_data_strcuture.assets/classification_phisical_structure.png differ diff --git a/docs/chapter_data_structure/data_and_memory.assets/computer_memory_location.png b/docs/chapter_data_structure/data_and_memory.assets/computer_memory_location.png index 2111f4903..900643191 100644 Binary files a/docs/chapter_data_structure/data_and_memory.assets/computer_memory_location.png and b/docs/chapter_data_structure/data_and_memory.assets/computer_memory_location.png differ diff --git a/docs/chapter_hashing/hash_map.assets/hash_collision.png b/docs/chapter_hashing/hash_map.assets/hash_collision.png new file mode 100644 index 000000000..e94330064 Binary files /dev/null and b/docs/chapter_hashing/hash_map.assets/hash_collision.png differ diff --git a/docs/chapter_hashing/hash_map.assets/hash_function.png b/docs/chapter_hashing/hash_map.assets/hash_function.png new file mode 100644 index 000000000..b15d22515 Binary files /dev/null and b/docs/chapter_hashing/hash_map.assets/hash_function.png differ diff --git a/docs/chapter_hashing/hash_map.assets/hash_map.png b/docs/chapter_hashing/hash_map.assets/hash_map.png new file mode 100644 index 000000000..5c36a2a18 Binary files /dev/null and b/docs/chapter_hashing/hash_map.assets/hash_map.png differ diff --git a/docs/chapter_hashing/hash_map.md b/docs/chapter_hashing/hash_map.md index 62725faae..77bc82321 100644 --- a/docs/chapter_hashing/hash_map.md +++ b/docs/chapter_hashing/hash_map.md @@ -4,9 +4,34 @@ comments: true # 哈希表 -哈希表通过建立「键 Key」和「值 Value」之间的映射,实现高效的元素查找。具体地,查询操作(给定一个 Key 查询得到 Value)的时间复杂度为 $O(1)$ 。 +哈希表通过建立「键 Key」和「值 Value」之间的映射,实现高效的元素查找。具体地,输入一个 Key ,在哈希表中查询并获取 Value ,时间复杂度为 $O(1)$ 。 -(图) +例如,给定一个包含 $n$ 个学生的数据库,每个学生有 "姓名 `name` ” 和 “学号 `id` ” 两项数据,希望实现一个查询功能:**输入一个学号,返回对应的姓名**,则可以使用哈希表实现。 + +![hash_map](hash_map.assets/hash_map.png) + +Fig. 哈希表抽象表示
+ +## 哈希表优势 + +除了哈希表之外,还可以使用以下数据结构来实现上述查询功能: + +- **无序数组:** 每个元素为 `[学号, 姓名]` ; +- **有序数组:** 将 `1.` 中的数组按照学号从小到大排序; +- **链表:** 每个结点的值为 `[学号, 姓名]` ; +- **二叉搜索树:** 每个结点的值为 `[学号, 姓名]` ,根据学号大小来构建树; + +使用上述方法,各项操作的时间复杂度如下表所示(在此不做赘述,详解可见 [二叉搜索树章节](https://www.hello-algo.com/chapter_tree/binary_search_tree/#_6))。无论是查找元素、还是增删元素,哈希表的时间复杂度都是 $O(1)$ ,全面胜出! + +Fig. 哈希函数
```java title="array_hash_map.java" /* 键值对 int->String */ @@ -107,16 +112,16 @@ class Entry { class ArrayHashMap { private ListFig. 哈希冲突
-上述现象被称为「哈希冲突 Hash Collision」,其会严重影响查询的正确性,我们将如何避免哈希冲突的问题留在下章讨论。 +综上所述,一个优秀的「哈希函数」应该具备以下特性: -(图) +- 尽量少地发生哈希冲突; +- 时间复杂度 $O(1)$ ,计算尽可能高效; +- 空间使用率高,即 “键值对占用空间 / 哈希表总占用空间” 尽可能大; diff --git a/docs/chapter_introduction/index.assets/look_up_dictionary.png b/docs/chapter_introduction/index.assets/look_up_dictionary.png deleted file mode 100644 index 0a24f6153..000000000 Binary files a/docs/chapter_introduction/index.assets/look_up_dictionary.png and /dev/null differ diff --git a/docs/chapter_introduction/index.assets/look_up_dictionary_step_1.png b/docs/chapter_introduction/index.assets/look_up_dictionary_step_1.png index b76e3db0c..f05b05178 100644 Binary files a/docs/chapter_introduction/index.assets/look_up_dictionary_step_1.png and b/docs/chapter_introduction/index.assets/look_up_dictionary_step_1.png differ diff --git a/docs/chapter_introduction/index.assets/look_up_dictionary_step_2.png b/docs/chapter_introduction/index.assets/look_up_dictionary_step_2.png index 08f0bf2d2..c4cc5d9d4 100644 Binary files a/docs/chapter_introduction/index.assets/look_up_dictionary_step_2.png and b/docs/chapter_introduction/index.assets/look_up_dictionary_step_2.png differ diff --git a/docs/chapter_introduction/index.assets/look_up_dictionary_step_3.png b/docs/chapter_introduction/index.assets/look_up_dictionary_step_3.png index 6b91df4e5..828c62606 100644 Binary files a/docs/chapter_introduction/index.assets/look_up_dictionary_step_3.png and b/docs/chapter_introduction/index.assets/look_up_dictionary_step_3.png differ diff --git a/docs/chapter_introduction/index.assets/look_up_dictionary_step_4.png b/docs/chapter_introduction/index.assets/look_up_dictionary_step_4.png index fd3f43333..c13db8dac 100644 Binary files a/docs/chapter_introduction/index.assets/look_up_dictionary_step_4.png and b/docs/chapter_introduction/index.assets/look_up_dictionary_step_4.png differ diff --git a/docs/chapter_introduction/index.assets/look_up_dictionary_step_5.png b/docs/chapter_introduction/index.assets/look_up_dictionary_step_5.png index 4eff15e80..ccd4f7ffa 100644 Binary files a/docs/chapter_introduction/index.assets/look_up_dictionary_step_5.png and b/docs/chapter_introduction/index.assets/look_up_dictionary_step_5.png differ diff --git a/docs/chapter_introduction/index.assets/relationship_between_data_structure_and_algorithm.png b/docs/chapter_introduction/index.assets/relationship_between_data_structure_and_algorithm.png index 82e610a96..1ab8721df 100644 Binary files a/docs/chapter_introduction/index.assets/relationship_between_data_structure_and_algorithm.png and b/docs/chapter_introduction/index.assets/relationship_between_data_structure_and_algorithm.png differ diff --git a/docs/chapter_preface/about_me.md b/docs/chapter_preface/about_me.md index 1b6dc2a18..29bd0bdb9 100644 --- a/docs/chapter_preface/about_me.md +++ b/docs/chapter_preface/about_me.md @@ -10,4 +10,4 @@ comments: true力扣(LeetCode)全网阅读量最高博主
分享近百道算法题解,累积回复数千读者的评论问题
-创作 LeetBook《图解算法数据结构》,已免费售出 21 万本
+创作 LeetBook《图解算法数据结构》,已免费售出 22 万本
diff --git a/docs/chapter_preface/index.md b/docs/chapter_preface/index.md index 0defc4a99..896f6e0c5 100644 --- a/docs/chapter_preface/index.md +++ b/docs/chapter_preface/index.md @@ -44,7 +44,7 @@ comments: true 首先介绍数据结构与算法的评价维度、算法效率的评估方法,引出了计算复杂度概念。 -接下来,从 **函数渐进上界** 入手,分别介绍了 **时间复杂度** 和 **空间复杂度** ,包括推算方法、常见类型、示例等。同时,剖析了 **最差、最佳、平均** 时间复杂度的联系与区别。 +接下来,从 **函数渐近上界** 入手,分别介绍了 **时间复杂度** 和 **空间复杂度** ,包括推算方法、常见类型、示例等。同时,剖析了 **最差、最佳、平均** 时间复杂度的联系与区别。 ### 数据结构 diff --git a/docs/chapter_preface/suggestions.assets/learning_route.png b/docs/chapter_preface/suggestions.assets/learning_route.png index 7423808d6..1f9e39844 100644 Binary files a/docs/chapter_preface/suggestions.assets/learning_route.png and b/docs/chapter_preface/suggestions.assets/learning_route.png differ diff --git a/docs/chapter_searching/binary_search.assets/binary_search_step1.png b/docs/chapter_searching/binary_search.assets/binary_search_step1.png index 6c26916e7..7748b3437 100644 Binary files a/docs/chapter_searching/binary_search.assets/binary_search_step1.png and b/docs/chapter_searching/binary_search.assets/binary_search_step1.png differ diff --git a/docs/chapter_searching/binary_search.assets/binary_search_step2.png b/docs/chapter_searching/binary_search.assets/binary_search_step2.png index 6f100faf9..fba2f959a 100644 Binary files a/docs/chapter_searching/binary_search.assets/binary_search_step2.png and b/docs/chapter_searching/binary_search.assets/binary_search_step2.png differ diff --git a/docs/chapter_searching/binary_search.assets/binary_search_step3.png b/docs/chapter_searching/binary_search.assets/binary_search_step3.png index afc4b2ad3..663ffcd26 100644 Binary files a/docs/chapter_searching/binary_search.assets/binary_search_step3.png and b/docs/chapter_searching/binary_search.assets/binary_search_step3.png differ diff --git a/docs/chapter_searching/binary_search.assets/binary_search_step4.png b/docs/chapter_searching/binary_search.assets/binary_search_step4.png index 71988301b..728b4cb1a 100644 Binary files a/docs/chapter_searching/binary_search.assets/binary_search_step4.png and b/docs/chapter_searching/binary_search.assets/binary_search_step4.png differ diff --git a/docs/chapter_searching/binary_search.assets/binary_search_step5.png b/docs/chapter_searching/binary_search.assets/binary_search_step5.png index 8cd4c64b7..1710f2433 100644 Binary files a/docs/chapter_searching/binary_search.assets/binary_search_step5.png and b/docs/chapter_searching/binary_search.assets/binary_search_step5.png differ diff --git a/docs/chapter_searching/binary_search.assets/binary_search_step6.png b/docs/chapter_searching/binary_search.assets/binary_search_step6.png index a82323c25..b0f6ab1b8 100644 Binary files a/docs/chapter_searching/binary_search.assets/binary_search_step6.png and b/docs/chapter_searching/binary_search.assets/binary_search_step6.png differ diff --git a/docs/chapter_searching/binary_search.assets/binary_search_step7.png b/docs/chapter_searching/binary_search.assets/binary_search_step7.png index f34257e38..20bbcec0f 100644 Binary files a/docs/chapter_searching/binary_search.assets/binary_search_step7.png and b/docs/chapter_searching/binary_search.assets/binary_search_step7.png differ diff --git a/docs/chapter_searching/binary_search.md b/docs/chapter_searching/binary_search.md index d0e4a6db9..0a407ff91 100644 --- a/docs/chapter_searching/binary_search.md +++ b/docs/chapter_searching/binary_search.md @@ -123,7 +123,24 @@ $$ === "Go" ```go title="binary_search.go" - + /* 二分查找(左闭右开) */ + func binarySearch1(nums []int, target int) int { + // 初始化左闭右开 [0, n) ,即 i, j 分别指向数组首元素、尾元素+1 + i, j := 0, len(nums) + // 循环,当搜索区间为空时跳出(当 i = j 时为空) + for i < j { + m := (i + j) / 2 // 计算中点索引 m + if nums[m] < target { // 此情况说明 target 在区间 [m+1, j) 中 + i = m + 1 + } else if nums[m] > target { // 此情况说明 target 在区间 [i, m) 中 + j = m + } else { // 找到目标元素,返回其索引 + return m + } + } + // 未找到目标元素,返回 -1 + return -1 + } ``` === "JavaScript" @@ -220,7 +237,24 @@ $$ === "Go" ```go title="binary_search.go" - + /* 二分查找(左闭右开) */ + func binarySearch1(nums []int, target int) int { + // 初始化左闭右开 [0, n) ,即 i, j 分别指向数组首元素、尾元素+1 + i, j := 0, len(nums) + // 循环,当搜索区间为空时跳出(当 i = j 时为空) + for i < j { + m := (i + j) / 2 // 计算中点索引 m + if nums[m] < target { // 此情况说明 target 在区间 [m+1, j) 中 + i = m + 1 + } else if nums[m] > target { // 此情况说明 target 在区间 [i, m) 中 + j = m + } else { // 找到目标元素,返回其索引 + return m + } + } + // 未找到目标元素,返回 -1 + return -1 + } ``` === "JavaScript" @@ -294,7 +328,10 @@ $$ === "Go" ```go title="" - + // (i + j) 有可能超出 int 的取值范围 + m := (i + j) / 2 + // 更换为此写法则不会越界 + m := i + (j - i) / 2 ``` === "JavaScript" diff --git a/docs/chapter_searching/hashing_search.assets/hash_search_index.png b/docs/chapter_searching/hashing_search.assets/hash_search_index.png index 51dcebc6c..ab9f0b6b4 100644 Binary files a/docs/chapter_searching/hashing_search.assets/hash_search_index.png and b/docs/chapter_searching/hashing_search.assets/hash_search_index.png differ diff --git a/docs/chapter_searching/hashing_search.assets/hash_search_listnode.png b/docs/chapter_searching/hashing_search.assets/hash_search_listnode.png index 26f3c0ba7..dd1ed8fab 100644 Binary files a/docs/chapter_searching/hashing_search.assets/hash_search_listnode.png and b/docs/chapter_searching/hashing_search.assets/hash_search_listnode.png differ diff --git a/docs/chapter_searching/linear_search.assets/linear_search.png b/docs/chapter_searching/linear_search.assets/linear_search.png index 722904e3c..01c26cbea 100644 Binary files a/docs/chapter_searching/linear_search.assets/linear_search.png and b/docs/chapter_searching/linear_search.assets/linear_search.png differ diff --git a/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step1.png b/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step1.png index f1790fc4c..9b72415ed 100644 Binary files a/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step1.png and b/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step1.png differ diff --git a/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step2.png b/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step2.png index 653f78047..b4d9588d2 100644 Binary files a/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step2.png and b/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step2.png differ diff --git a/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step3.png b/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step3.png index 3a1bfb57c..bc44269ce 100644 Binary files a/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step3.png and b/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step3.png differ diff --git a/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step4.png b/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step4.png index 5d1a6abf2..126f24db7 100644 Binary files a/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step4.png and b/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step4.png differ diff --git a/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step5.png b/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step5.png index c0d00d9c0..0d4335767 100644 Binary files a/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step5.png and b/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step5.png differ diff --git a/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step6.png b/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step6.png index 94d187634..265b063f5 100644 Binary files a/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step6.png and b/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step6.png differ diff --git a/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step7.png b/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step7.png index bc565e742..3899ca716 100644 Binary files a/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step7.png and b/docs/chapter_sorting/bubble_sort.assets/bubble_operation_step7.png differ diff --git a/docs/chapter_sorting/bubble_sort.assets/bubble_sort.png b/docs/chapter_sorting/bubble_sort.assets/bubble_sort.png index b6bd51f92..693d915a2 100644 Binary files a/docs/chapter_sorting/bubble_sort.assets/bubble_sort.png and b/docs/chapter_sorting/bubble_sort.assets/bubble_sort.png differ diff --git a/docs/chapter_sorting/bubble_sort.md b/docs/chapter_sorting/bubble_sort.md index 05ef478b0..488c57561 100644 --- a/docs/chapter_sorting/bubble_sort.md +++ b/docs/chapter_sorting/bubble_sort.md @@ -6,7 +6,7 @@ comments: true 「冒泡排序 Bubble Sort」是一种最基础的排序算法,非常适合作为第一个学习的排序算法。顾名思义,「冒泡」是该算法的核心操作。 -!!! tip "为什么叫 “冒泡”" +!!! question "为什么叫 “冒泡”" 在水中,越大的泡泡浮力越大,所以最大的泡泡会最先浮到水面。 @@ -112,7 +112,19 @@ comments: true === "Go" ```go title="bubble_sort.go" - + /* 冒泡排序 */ + func bubbleSort(nums []int) { + // 外循环:待排序元素数量为 n-1, n-2, ..., 1 + for i := len(nums) - 1; i > 0; i-- { + // 内循环:冒泡操作 + for j := 0; j < i; j++ { + if nums[j] > nums[j+1] { + // 交换 nums[j] 与 nums[j + 1] + nums[j], nums[j+1] = nums[j+1], nums[j] + } + } + } + } ``` === "JavaScript" @@ -239,7 +251,24 @@ comments: true === "Go" ```go title="bubble_sort.go" - + /* 冒泡排序(标志优化)*/ + func bubbleSortWithFlag(nums []int) { + // 外循环:待排序元素数量为 n-1, n-2, ..., 1 + for i := len(nums) - 1; i > 0; i-- { + flag := false // 初始化标志位 + // 内循环:冒泡操作 + for j := 0; j < i; j++ { + if nums[j] > nums[j+1] { + // 交换 nums[j] 与 nums[j + 1] + nums[j], nums[j+1] = nums[j+1], nums[j] + flag = true // 记录交换元素 + } + } + if flag == false { // 此轮冒泡未交换任何元素,直接跳出 + break + } + } + } ``` === "JavaScript" diff --git a/docs/chapter_sorting/insertion_sort.assets/insertion_operation.png b/docs/chapter_sorting/insertion_sort.assets/insertion_operation.png index 75c6e47a3..cdaaa4e1a 100644 Binary files a/docs/chapter_sorting/insertion_sort.assets/insertion_operation.png and b/docs/chapter_sorting/insertion_sort.assets/insertion_operation.png differ diff --git a/docs/chapter_sorting/insertion_sort.assets/insertion_sort.png b/docs/chapter_sorting/insertion_sort.assets/insertion_sort.png index 6e5ca0c08..61ee43dfe 100644 Binary files a/docs/chapter_sorting/insertion_sort.assets/insertion_sort.png and b/docs/chapter_sorting/insertion_sort.assets/insertion_sort.png differ diff --git a/docs/chapter_sorting/quick_sort.assets/pivot_division_step8.png b/docs/chapter_sorting/quick_sort.assets/pivot_division_step8.png index 418b17cb4..acb723b77 100644 Binary files a/docs/chapter_sorting/quick_sort.assets/pivot_division_step8.png and b/docs/chapter_sorting/quick_sort.assets/pivot_division_step8.png differ diff --git a/docs/chapter_sorting/quick_sort.assets/pivot_division_step9.png b/docs/chapter_sorting/quick_sort.assets/pivot_division_step9.png index 3e423596a..c07b45749 100644 Binary files a/docs/chapter_sorting/quick_sort.assets/pivot_division_step9.png and b/docs/chapter_sorting/quick_sort.assets/pivot_division_step9.png differ diff --git a/docs/chapter_stack_and_queue/deque.assets/deque_operations.png b/docs/chapter_stack_and_queue/deque.assets/deque_operations.png index 94ede7b2b..242ea98c5 100644 Binary files a/docs/chapter_stack_and_queue/deque.assets/deque_operations.png and b/docs/chapter_stack_and_queue/deque.assets/deque_operations.png differ diff --git a/docs/chapter_stack_and_queue/queue.assets/queue_operations.png b/docs/chapter_stack_and_queue/queue.assets/queue_operations.png index 61e433c5c..b165cd10d 100644 Binary files a/docs/chapter_stack_and_queue/queue.assets/queue_operations.png and b/docs/chapter_stack_and_queue/queue.assets/queue_operations.png differ diff --git a/docs/chapter_stack_and_queue/queue.md b/docs/chapter_stack_and_queue/queue.md index a663b9745..c27058519 100644 --- a/docs/chapter_stack_and_queue/queue.md +++ b/docs/chapter_stack_and_queue/queue.md @@ -20,13 +20,13 @@ comments: true