From 524a101f4d08cba2c2b9d68352e14a6d5beb32a7 Mon Sep 17 00:00:00 2001 From: luzhipeng Date: Fri, 12 Apr 2019 16:23:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +- .../basic-data-structure-link-list.svg | 214 ++++++++++++++++++ .../thinkings/basic-data-structure-queue.svg | 42 ++++ .../thinkings/basic-data-structure-stack.png | Bin 0 -> 31961 bytes .../thinkings/binary-tree-traversal-bfs.gif | Bin 0 -> 13445 bytes .../thinkings/binary-tree-traversal-dfs.gif | Bin 0 -> 13447 bytes thinkings/basic-data-structure.md | 44 +++- thinkings/binary-tree-traversal.md | 10 + 8 files changed, 310 insertions(+), 5 deletions(-) create mode 100644 assets/thinkings/basic-data-structure-link-list.svg create mode 100644 assets/thinkings/basic-data-structure-queue.svg create mode 100644 assets/thinkings/basic-data-structure-stack.png create mode 100644 assets/thinkings/binary-tree-traversal-bfs.gif create mode 100644 assets/thinkings/binary-tree-traversal-dfs.gif diff --git a/README.md b/README.md index 4e10965..3ad9013 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ leetcode 题解,记录自己的 leecode 解题之路。 ## 食用指南 - 经典题目的解析的目录部分,前面有🆕的代表是最新更新的 +- 对于最近更新的部分, 前面会有 🖊 标注 - 将来会在这里更新anki卡片 - 这里有一份leetcode官方账号在知乎上给出的一个《互联网公司最常见的面试算法题有哪些?》的答案,我这里尽量去覆盖回答中的题目和知识点 原文地址: https://www.zhihu.com/question/24964987/answer/586425979 @@ -111,8 +112,8 @@ leetcode 题解,记录自己的 leecode 解题之路。 ### 数据结构与算法的总结 -- [basic-data-structure](./thinkings/basic-data-structure.md)(草稿) -- [binary-tree-traversal](./thinkings/binary-tree-traversal.md) +- 🖊 [basic-data-structure](./thinkings/basic-data-structure.md)(草稿) +- 🖊 [binary-tree-traversal](./thinkings/binary-tree-traversal.md) - [dynamic-programming](./thinkings/dynamic-programming.md) - [哈夫曼编码和游程编码](./thinkings/run-length-encode-and-huffman-encode.md) - [布隆过滤器](./thinkings/bloom-filter.md) diff --git a/assets/thinkings/basic-data-structure-link-list.svg b/assets/thinkings/basic-data-structure-link-list.svg new file mode 100644 index 0000000..6f0971e --- /dev/null +++ b/assets/thinkings/basic-data-structure-link-list.svg @@ -0,0 +1,214 @@ + + + + + + + + + image/svg+xml + + + + + + + 12 + + + + + 99 + + + + + 37 + + + + + + + + + + + + + diff --git a/assets/thinkings/basic-data-structure-queue.svg b/assets/thinkings/basic-data-structure-queue.svg new file mode 100644 index 0000000..4602fb4 --- /dev/null +++ b/assets/thinkings/basic-data-structure-queue.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + +Dequeue +Enqueue + + + + + + + + + + + + + + + +Back +Front + diff --git a/assets/thinkings/basic-data-structure-stack.png b/assets/thinkings/basic-data-structure-stack.png new file mode 100644 index 0000000000000000000000000000000000000000..4fbe5e831a24e22c3c38a3266da88e65358c24ec GIT binary patch literal 31961 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 literal 0 HcmV?d00001 diff --git a/assets/thinkings/binary-tree-traversal-dfs.gif b/assets/thinkings/binary-tree-traversal-dfs.gif new file mode 100644 index 0000000000000000000000000000000000000000..ca2b86328f0081375702c30369e3d64a61861b8c GIT binary patch literal 13447 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 "队列"这个名称,可类比为现实生活中排队(不插队的那种) + +在计算机科学中, 一个 队列(queue) 是一种特殊类型的抽象数据类型或集合。集合中的实体按顺序保存。 + +队列基本操作有两种: + +- 向队列的后端位置添加实体,称为入队 +- 从队列的前端位置移除实体,称为出队。 + +队列中元素先进先出 FIFO (first in, first out)的示意: + +![basic-data-structure-queue](../assets/thinkings/basic-data-structure-queue.svg) + +(图片来自 https://github.com/trekhleb/javascript-algorithms/blob/master/src/data-structures/queue/README.zh-CN.md) + ### 栈 +在计算机科学中, 一个 栈(stack) 是一种抽象数据类型,用作表示元素的集合,具有两种主要操作: + +push, 添加元素到栈的顶端(末尾); +pop, 移除栈最顶端(末尾)的元素. +以上两种操作可以简单概括为“后进先出(LIFO = last in, first out)”。 + +此外,应有一个 peek 操作用于访问栈当前顶端(末尾)的元素。(只返回不弹出) -call stack, view stack +> "栈"这个名称,可类比于一组物体的堆叠(一摞书,一摞盘子之类的)。 -其实浏览器的执行栈就是一个基本的栈结构,从数据结构上说,它就是一个栈。 +栈的 push 和 pop 操作的示意: + +![basic-data-structure-stack](../assets/thinkings/basic-data-structure-stack.png) + +(图片来自 https://github.com/trekhleb/javascript-algorithms/blob/master/src/data-structures/stack/README.zh-CN.md) + + +栈在很多地方都有着应用,比如大家熟悉的浏览器就有很多栈,其实浏览器的执行栈就是一个基本的栈结构,从数据结构上说,它就是一个栈。 这也就解释了,我们用递归的解法和用循环+栈的解法本质上是差不多。 + + 比如如下JS代码: ```js @@ -102,6 +134,12 @@ foo(); ### 链表 +链表是一种最基本数据结构,熟练掌握链表的结构和常见操作是基础中的基础。 + +![basic-data-structure-link-list](../assets/thinkings/basic-data-structure-link-list.svg) + +(图片来自: https://github.com/trekhleb/javascript-algorithms/tree/master/src/algorithms/linked-list/traversal) + #### React Fiber 很多人都说 fiber 是基于链表实现的,但是为什么要基于链表呢,可能很多人并没有答案,那么我觉得可以把这两个点(fiber 和链表)放到一起来讲下。 diff --git a/thinkings/binary-tree-traversal.md b/thinkings/binary-tree-traversal.md index 333e410..ddee3cf 100644 --- a/thinkings/binary-tree-traversal.md +++ b/thinkings/binary-tree-traversal.md @@ -12,6 +12,12 @@ DFS 和 BFS 都有着自己的应用,比如 leetcode 301 号问题和 609 号 DFS 都可以使用栈来简化操作,并且其实树本身是一种递归的数据结构,因此递归和栈对于 DFS 来说是两个关键点。 +DFS 图解: + +![binary-tree-traversal-dfs](../assets/thinkings/binary-tree-traversal-dfs.gif) + +(图片来自 https://github.com/trekhleb/javascript-algorithms/tree/master/src/algorithms/tree/depth-first-search) + BFS 的关键点在于如何记录每一层次是否遍历完成, 我们可以用一个标识位来表式当前层的结束。 下面我们依次讲解: @@ -66,6 +72,10 @@ BFS 的关键点在于如何记录每一层次是否遍历完成, 我们可以 层次遍历的关键点在于如何记录每一层次是否遍历完成, 我们可以用一个标识位来表式当前层的结束。 +![binary-tree-traversal-bfs](../assets/thinkings/binary-tree-traversal-bfs.gif) + +(图片来自 https://github.com/trekhleb/javascript-algorithms/tree/master/src/algorithms/tree/breadth-first-search) + 具体做法: 1. 根节点入队列, 并入队列一个特殊的标识位,此处是 null -- GitLab