Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
higboys
javascript-algorithms
提交
872521fb
J
javascript-algorithms
项目概览
higboys
/
javascript-algorithms
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
javascript-algorithms
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
872521fb
编写于
8月 30, 2018
作者:
J
Jack Lee
提交者:
Oleksii Trekhleb
8月 30, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Partial translation of Simplified Chinese (#185)
* init * init * init * init
上级
68af4fc1
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
395 addition
and
9 deletion
+395
-9
README.zh-CN.md
README.zh-CN.md
+9
-9
src/data-structures/doubly-linked-list/README.zh-CN.md
src/data-structures/doubly-linked-list/README.zh-CN.md
+99
-0
src/data-structures/graph/README.zh-CN.md
src/data-structures/graph/README.zh-CN.md
+22
-0
src/data-structures/hash-table/README.zh-CN.md
src/data-structures/hash-table/README.zh-CN.md
+21
-0
src/data-structures/heap/README.zh-CN.md
src/data-structures/heap/README.zh-CN.md
+19
-0
src/data-structures/linked-list/README.zh-CN.md
src/data-structures/linked-list/README.zh-CN.md
+134
-0
src/data-structures/priority-queue/README.zh-CN.md
src/data-structures/priority-queue/README.zh-CN.md
+15
-0
src/data-structures/queue/README.zh-CN.md
src/data-structures/queue/README.zh-CN.md
+15
-0
src/data-structures/stack/README.zh-CN.md
src/data-structures/stack/README.zh-CN.md
+21
-0
src/data-structures/tree/README.zh-CN.md
src/data-structures/tree/README.zh-CN.md
+24
-0
src/data-structures/trie/README.zh-CN.md
src/data-structures/trie/README.zh-CN.md
+16
-0
未找到文件。
README.zh-CN.md
浏览文件 @
872521fb
...
...
@@ -22,21 +22,21 @@ _Read this in other languages:_
`B`
- 初学者,
`A`
- 进阶
*
`B`
[
链表
](
src/data-structures/linked-list
)
*
`B`
[
双向链表
](
src/data-structures/doubly-linked-list
)
*
`B`
[
队列
](
src/data-structures/queue
)
*
`B`
[
栈
](
src/data-structures/stack
)
*
`B`
[
哈希表
](
src/data-structures/hash-table
)
*
`B`
[
堆
](
src/data-structures/heap
)
*
`B`
[
优先队列
](
src/data-structures/priority-queue
)
*
`B`
[
链表
](
src/data-structures/linked-list
/README.zh-CN.md
)
*
`B`
[
双向链表
](
src/data-structures/doubly-linked-list
/README.zh-CN.md
)
*
`B`
[
队列
](
src/data-structures/queue
/README.zh-CN.md
)
*
`B`
[
栈
](
src/data-structures/stack
/README.zh-CN.md
)
*
`B`
[
哈希表
](
src/data-structures/hash-table
/README.zh-CN.md
)
*
`B`
[
堆
](
src/data-structures/heap
/README.zh-CN.md
)
*
`B`
[
优先队列
](
src/data-structures/priority-queue
/README.zh-CN.md
)
*
`A`
[
字典树
](
src/data-structures/trie
)
*
`A`
[
树
](
src/data-structures/tree
)
*
`A`
[
树
](
src/data-structures/tree
/README.zh-CN.md
)
*
`A`
[
二叉查找树
](
src/data-structures/tree/binary-search-tree
)
*
`A`
[
AVL 树
](
src/data-structures/tree/avl-tree
)
*
`A`
[
红黑树
](
src/data-structures/tree/red-black-tree
)
*
`A`
[
线段树
](
src/data-structures/tree/segment-tree
)
- 使用 最小/最大/总和 范围查询示例
*
`A`
[
树状数组
](
src/data-structures/tree/fenwick-tree
)
(
二叉索引树
)
*
`A`
[
图
](
src/data-structures/graph
)
(
有向图与无向图
)
*
`A`
[
图
](
src/data-structures/graph
/README.zh-CN.md
)
(
有向图与无向图
)
*
`A`
[
并查集
](
src/data-structures/disjoint-set
)
*
`A`
[
布隆过滤器
](
src/data-structures/bloom-filter
)
...
...
src/data-structures/doubly-linked-list/README.zh-CN.md
0 → 100644
浏览文件 @
872521fb
# 双向链表
在计算机科学中, 一个
**双向链表(doubly linked list)**
是由一组称为节点的顺序链接记录组成的链接数据结构。每个节点包含两个字段,称为链接,它们是对节点序列中上一个节点和下一个节点的引用。开始节点和结束节点的上一个链接和下一个链接分别指向某种终止节点,通常是前哨节点或null,以方便遍历列表。如果只有一个前哨节点,则列表通过前哨节点循环链接。它可以被概念化为两个由相同数据项组成的单链表,但顺序相反。
![
Doubly Linked List
](
https://upload.wikimedia.org/wikipedia/commons/5/5e/Doubly-linked-list.svg
)
两个节点链接允许在任一方向上遍历列表。
在双向链表中进行添加或者删除节点时,需做的链接更改要比单向链表复杂得多。这种操作在单向链表中更简单高效,因为不需要关注一个节点(除第一个和最后一个节点以外的节点)的两个链接,而只需要关注一个链接即可。
## 基础操作的伪代码
### 插入
```
text
Add(value)
Pre: value is the value to add to the list
Post: value has been placed at the tail of the list
n ← node(value)
if head = ø
head ← n
tail ← n
else
n.previous ← tail
tail.next ← n
tail ← n
end if
end Add
```
### 删除
```
text
Remove(head, value)
Pre: head is the head node in the list
value is the value to remove from the list
Post: value is removed from the list, true; otherwise false
if head = ø
return false
end if
if value = head.value
if head = tail
head ← ø
tail ← ø
else
head ← head.Next
head.previous ← ø
end if
return true
end if
n ← head.next
while n = ø and value = n.value
n ← n.next
end while
if n = tail
tail ← tail.previous
tail.next ← ø
return true
else if n = ø
n.previous.next ← n.next
n.next.previous ← n.previous
return true
end if
return false
end Remove
```
### 反向遍历
```
text
ReverseTraversal(tail)
Pre: tail is the node of the list to traverse
Post: the list has been traversed in reverse order
n ← tail
while n = ø
yield n.value
n ← n.previous
end while
end Reverse Traversal
```
## 复杂度
## 时间复杂度
| Access | Search | Insertion | Deletion |
| :-------: | :-------: | :-------: | :-------: |
| O(n) | O(n) | O(1) | O(1) |
### 空间复杂度
O(n)
## 参考
-
[
Wikipedia
](
https://en.wikipedia.org/wiki/Doubly_linked_list
)
-
[
YouTube
](
https://www.youtube.com/watch?v=JdQeNxWCguQ&t=7s&index=72&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8
)
src/data-structures/graph/README.zh-CN.md
0 → 100644
浏览文件 @
872521fb
# 图
在计算机科学中,
**图(graph)**
是一种抽象数据类型,
旨在实现数学中的无向图和有向图概念,特别是图论领域。
一个图数据结构是一个(由有限个或者可变数量的)顶点/节点/点和边构成的有限集。
如果顶点对之间是无序的,称为无序图,否则称为有序图;
如果顶点对之间的边是没有方向的,称为无向图,否则称为有向图;
如果顶点对之间的边是有权重的,该图可称为加权图。
![
Graph
](
https://www.tutorialspoint.com/data_structures_algorithms/images/graph.jpg
)
## 参考
-
[
Wikipedia
](
https://en.wikipedia.org/wiki/Graph_(abstract_data_type
)
)
-
[
Introduction to Graphs on YouTube
](
https://www.youtube.com/watch?v=gXgEDyodOJU&index=9&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8
)
-
[
Graphs representation on YouTube
](
https://www.youtube.com/watch?v=k1wraWzqtvQ&index=10&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8
)
src/data-structures/hash-table/README.zh-CN.md
0 → 100644
浏览文件 @
872521fb
# 哈希表
在计算中, 一个
**哈希表(hash table 或hash map)**
是一种实现
*关联数组(associative array)*
的抽象数据;类型, 该结构可以将
*键映射到值*
。
哈希表使用
*哈希函数/散列函数*
来计算一个值在数组或桶(buckets)中或槽(slots)中对应的索引,可使用该索引找到所需的值。
理想情况下,散列函数将为每个键分配给一个唯一的桶(bucket),但是大多数哈希表设计采用不完美的散列函数,这可能会导致"哈希冲突(hash collisions)",也就是散列函数为多个键(key)生成了相同的索引,这种碰撞必须
以某种方式进行处理。
![
Hash Table
](
https://upload.wikimedia.org/wikipedia/commons/7/7d/Hash_table_3_1_1_0_1_0_0_SP.svg
)
通过单独的链接解决哈希冲突
![
Hash Collision
](
https://upload.wikimedia.org/wikipedia/commons/d/d0/Hash_table_5_0_1_1_1_1_1_LL.svg
)
## 参考
-
[
Wikipedia
](
https://en.wikipedia.org/wiki/Hash_table
)
-
[
YouTube
](
https://www.youtube.com/watch?v=shs0KM3wKv8&index=4&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8
)
src/data-structures/heap/README.zh-CN.md
0 → 100644
浏览文件 @
872521fb
# 堆 (数据结构)
在计算机科学中, 一个
** 堆(heap)**
是一种特殊的基于树的数据结构,它满足下面描述的堆属性。
在一个
*最小堆(min heap)*
中, 如果
`P`
是
`C`
的一个父级节点, 那么
`P`
的key(或value)应小于或等于
`C`
的对应值.
![
最小堆
](
https://upload.wikimedia.org/wikipedia/commons/6/69/Min-heap.png
)
在一个
*最大堆(max heap)*
中,
`P`
的key(或value)大于
`C`
的对应值。
![
堆
](
https://upload.wikimedia.org/wikipedia/commons/3/38/Max-Heap.svg
)
在堆“顶部”的没有父级节点的节点,被称之为根节点。
## 参考
-
[
Wikipedia
](
https://en.wikipedia.org/wiki/Heap_(data_structure
)
)
-
[
YouTube
](
https://www.youtube.com/watch?v=t0Cq6tVNRBA&index=5&t=0s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8
)
src/data-structures/linked-list/README.zh-CN.md
0 → 100644
浏览文件 @
872521fb
# 链表
在计算机科学中, 一个
**链表**
是数据元素的线性集合, 元素的线性顺序不是由它们在内存中的物理位置给出的。 相反, 每个元素指向下一个元素。它是由一组节点组成的数据结构,这些节点一起,表示序列。
在最简单的形式下,每个节点由数据和到序列中下一个节点的引用(换句话说,链接)组成。这种结构允许在迭代期间有效地从序列中的任何位置插入或删除元素。
更复杂的变体添加额外的链接,允许有效地插入或删除任意元素引用。链表的一个缺点是访问时间是线性的(而且难以管道化)。
更快的访问,如随机访问,是不可行的。与链表相比,数组具有更好的缓存位置。
![
Linked List
](
https://upload.wikimedia.org/wikipedia/commons/6/6d/Singly-linked-list.svg
)
## 基本操作的伪代码
### 插入
```
text
Add(value)
Pre: value is the value to add to the list
Post: value has been placed at the tail of the list
n ← node(value)
if head = ø
head ← n
tail ← n
else
tail.next ← n
tail ← n
end if
end Add
```
### 搜索
```
text
Contains(head, value)
Pre: head is the head node in the list
value is the value to search for
Post: the item is either in the linked list, true; otherwise false
n ← head
while n != ø and n.value != value
n ← n.next
end while
if n = ø
return false
end if
return true
end Contains
```
### 删除
```
text
Remove(head, value)
Pre: head is the head node in the list
value is the value to remove from the list
Post: value is removed from the list, true, otherwise false
if head = ø
return false
end if
n ← head
if n.value = value
if head = tail
head ← ø
tail ← ø
else
head ← head.next
end if
return true
end if
while n.next = ø and n.next.value = value
n ← n.next
end while
if n.next = ø
if n.next = tail
tail ← n
end if
n.next ← n.next.next
return true
end if
return false
end Remove
```
### 遍历
```
text
Traverse(head)
Pre: head is the head node in the list
Post: the items in the list have been traversed
n ← head
while n = 0
yield n.value
n ← n.next
end while
end Traverse
```
### 反向遍历
```
text
ReverseTraversal(head, tail)
Pre: head and tail belong to the same list
Post: the items in the list have been traversed in reverse order
if tail = ø
curr ← tail
while curr = head
prev ← head
while prev.next = curr
prev ← prev.next
end while
yield curr.value
curr ← prev
end while
yeild curr.value
end if
end ReverseTraversal
```
## 复杂度
### 时间复杂度
| Access | Search | Insertion | Deletion |
| :-------: | :-------: | :-------: | :-------: |
| O(n) | O(n) | O(1) | O(1) |
### 空间复杂度
O(n)
## 参考
-
[
Wikipedia
](
https://en.wikipedia.org/wiki/Linked_list
)
-
[
YouTube
](
https://www.youtube.com/watch?v=njTh_OwMljA&index=2&t=1s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8
)
src/data-structures/priority-queue/README.zh-CN.md
0 → 100644
浏览文件 @
872521fb
# 优先队列
在计算机科学中,
**优先级队列(priority queue)**
是一种抽象数据类型, 它类似于常规的队列或栈, 但每个元素都有与之关联的“优先级”。
在优先队列中, 低优先级的元素之前前面应该是高优先级的元素。 如果两个元素具有相同的优先级, 则根据它们在队列中的顺序是它们的出现顺序即可。
优先队列虽通常用堆来实现,但它在概念上与堆不同。优先队列是一个抽象概念,就像“列表”或“图”这样的抽象概念一样;
正如列表可以用链表或数组实现一样,优先队列可以用堆或各种其他方法实现,例如无序数组。
## 参考
-
[
Wikipedia
](
https://en.wikipedia.org/wiki/Priority_queue
)
-
[
YouTube
](
https://www.youtube.com/watch?v=wptevk0bshY&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=6
)
src/data-structures/queue/README.zh-CN.md
0 → 100644
浏览文件 @
872521fb
# 队列
在计算机科学中, 一个
**队列(queue)**
是一种特殊类型的抽象数据类型或集合。集合中的实体按顺序保存。
队列基本操作有两种: 向队列的后端位置添加实体,称为入队,并从队列的前端位置移除实体,称为出队。
队列中元素先进先出 FIFO (first in, first out)的示意
![
Queue
](
https://upload.wikimedia.org/wikipedia/commons/5/52/Data_Queue.svg
)
## 参考
-
[
Wikipedia
](
https://en.wikipedia.org/wiki/Queue_(abstract_data_type
)
)
-
[
YouTube
](
https://www.youtube.com/watch?v=wjI1WNcIntg&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=3&
)
src/data-structures/stack/README.zh-CN.md
0 → 100644
浏览文件 @
872521fb
# 栈
在计算机科学中, 一个
**栈(stack)**
时一种抽象数据类型,用作表示元素的集合,具有两种主要操作:
*
**push**
, 添加元素到栈的顶端(末尾);
*
**pop**
, 移除栈最顶端(末尾)的元素.
以上两种操作可以简单概括为“后进先出(LIFO = last in, first out)”。
此外,应有一个
`peek`
操作用于访问栈当前顶端(末尾)的元素。
"栈"这个名称,可类比于一组物体的堆叠(一摞书,一摞盘子之类的)。
栈的 push 和 pop 操作的示意
![
Stack
](
https://upload.wikimedia.org/wikipedia/commons/b/b4/Lifo_stack.png
)
## 参考
-
[
Wikipedia
](
https://en.wikipedia.org/wiki/Stack_(abstract_data_type
)
)
-
[
YouTube
](
https://www.youtube.com/watch?v=wjI1WNcIntg&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=3&
)
src/data-structures/tree/README.zh-CN.md
0 → 100644
浏览文件 @
872521fb
# 树
*
[
二叉搜索树
](
binary-search-tree
)
*
[
AVL树
](
avl-tree
)
*
[
红黑树
](
red-black-tree
)
*
[
线段树
](
segment-tree
)
- with min/max/sum range queries examples
*
[
芬威克树/Fenwick Tree
](
fenwick-tree
)
(
Binary
Indexed Tree)
在计算机科学中,
**树(tree)**
是一种广泛使用的抽象数据类型(ADT)— 或实现此ADT的数据结构 — 模拟分层树结构, 具有根节点和有父节点的子树,表示为一组链接节点。
树可以被(本地地)递归定义为一个(始于一个根节点的)节点集, 每个节点都是一个包含了值的数据结构, 除了值,还有该节点的节点引用列表(子节点)一起。
树的节点之间没有引用重复的约束。
一棵简单的无序树; 在下图中:
标记为7的节点具有两个子节点, 标记为2和6;
一个父节点,标记为2,作为根节点, 在顶部,没有父节点。
![
Tree
](
https://upload.wikimedia.org/wikipedia/commons/f/f7/Binary_tree.svg
)
## 参考
-
[
Wikipedia
](
https://en.wikipedia.org/wiki/Tree_(data_structure
)
)
-
[
YouTube
](
https://www.youtube.com/watch?v=oSWTXtMglKE&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=8
)
src/data-structures/trie/README.zh-CN.md
0 → 100644
浏览文件 @
872521fb
# 字典树
在计算机科学中,
**字典树(trie,中文又被称为”单词查找树“或 ”键树“)**
, 也称为数字树,有时候也被称为基数树或前缀树(因为它们可以通过前缀搜索),它是一种搜索树--一种已排序的数据结构,通常用于存储动态集或键为字符串的关联数组。
与二叉搜索树不同, 树上没有节点存储与该节点关联的键; 相反,节点在树上的位置定义了与之关联的键。一个节点的全部后代节点都有一个与该节点关联的通用的字符串前缀, 与根节点关联的是空字符串。
值对于字典树中关联的节点来说,不是必需的,相反,值往往和相关的叶子相关,以及与一些键相关的内部节点相关。
有关字典树的空间优化示意,请参阅紧凑前缀树
![
Trie
](
https://upload.wikimedia.org/wikipedia/commons/b/be/Trie_example.svg
)
## 参考
-
[
Wikipedia
](
https://en.wikipedia.org/wiki/Trie
)
-
[
YouTube
](
https://www.youtube.com/watch?v=zIjfhVPRZCg&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8&index=7&t=0s
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录