Skip to content

Commit 77edb89

Browse files
committed
docs: update docs
1 parent c7701e6 commit 77edb89

26 files changed

+856
-816
lines changed

README.md

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
# JavaScript 数据结构与算法
22

3-
本仓库内容根据哔哩哔哩 [coderwhy的JavaScript数据结构与算法](https://www.bilibili.com/video/BV1x7411L7Q7?p=1) 视频整理的学习笔记,视频教程讲的特别好,配合本仓库的代码测试环境来练习,学习效果更佳,欢迎同学们 Star 和 Fork。
3+
本仓库内容根据哔哩哔哩 [JavaScript 数据结构与算法](https://www.bilibili.com/video/BV1x7411L7Q7?p=1) 视频整理的学习笔记,视频教程讲的特别好,配合本仓库的代码测试环境来练习,学习效果更佳,欢迎同学们 Star 和 Fork。
44

5-
推荐大家按照目录结构的顺序来学习,由浅入深,循序渐进,轻松搞定数据结构和算法。
5+
推荐大家按照目录顺序来学习,由浅入深,循序渐进,轻松搞定数据结构和算法。
66

77
代码部分均采用 ES6 编写,使用 webpack 和 babel 将 ES6 自动转换成 ES5。
88

9-
> 重点要掌握数据结构与算法的思想,编程语言只是一种实现工具。
9+
> 重点要掌握数据结构与算法的思想和原理,使用哪种编程语言区别不大。
10+
11+
**访问作者博客 [《JavaScript 数据结构与算法》](https://xpoet.cn/2020/07/JavaScript%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%88%E4%B8%93%E8%BE%91%EF%BC%89/) 可获取更好的阅读体验。**
12+
**[传送门 🏃](https://xpoet.cn/2020/07/JavaScript%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%88%E4%B8%93%E8%BE%91%EF%BC%89/)**
1013

1114
## 文档目录
1215

@@ -21,8 +24,9 @@
2124
- [JavaScript 数据结构与算法(九)字典](assets/doc/09_JavaScript数据结构与算法(九)字典.md)
2225
- [JavaScript 数据结构与算法(十)哈希表](assets/doc/10_JavaScript数据结构与算法(十)哈希表.md)
2326
- [JavaScript 数据结构与算法(十一)树](assets/doc/11_JavaScript数据结构与算法(十一)树.md)
24-
- [JavaScript 数据结构与算法(十二)二叉搜索树](assets/doc/12_JavaScript数据结构与算法(十二)二叉搜索树.md)
25-
- [JavaScript 数据结构与算法(十三)图](assets/doc/13_JavaScript数据结构与算法(十三)图.md)
27+
- [JavaScript 数据结构与算法(十二)二叉树](assets/doc/12_JavaScript数据结构与算法(十二)二叉树.md)
28+
- [JavaScript 数据结构与算法(十三)二叉搜索树](assets/doc/13_JavaScript数据结构与算法(十三)二叉搜索树.md)
29+
- [JavaScript 数据结构与算法(十四)图](assets/doc/14_JavaScript数据结构与算法(十四)图.md)
2630

2731
## 代码目录
2832

@@ -50,6 +54,7 @@ npm run start
5054
```
5155

5256
开启**测试环境**的服务后,可在 `src/index.js` 选择要测试的代码,查看具体值输出。
57+
比如:我要测试****,把 `// import './Stack'` 的注释去掉,要测试哪个就去掉哪个的注释。
5358

5459
```js
5560
// 导入栈结构的封装及测试代码
@@ -77,7 +82,7 @@ npm run start
7782
// import './HashTable';
7883

7984
// 导入树结构的封装及测试代码
80-
import './Tree';
85+
// import './Tree';
8186

8287
// 导入图结构的封装及测试代码
8388
// import './Graph';

assets/doc/01_JavaScript数据结构与算法(一)前言.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
### 常见的数据结构
5757

5858
- 数组(Aarray)
59-
- 栈(Queue
59+
- 栈(Stack
6060
- 链表(Linked List)
6161
- 图(Graph)
6262
- 散列表(Hash)

assets/doc/02_JavaScript数据结构与算法(二)数组.md

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,76 @@
1-
## JavaScript 数据结构与算法(二)数组结构
1+
# JavaScript 数据结构与算法(二)数组
22

33
几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构。
44
数组通常情况下用于存储一系列同一种数据类型的值。
55
但在 JavaScript 里,数组中可以保存不同类型的值。但我们还是要遵守最佳实践,别这么做(大多数语言都没这个能力)。
66

7-
### 创建和初始化数组
7+
## 创建和初始化数组
88

9-
- new Array()
10-
`const daysOfWeek = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday','Thursday', 'Friday', 'Saturday');`
9+
- `new Array()`
1110

12-
- []
13-
`const daysOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];`
11+
```js
12+
const daysOfWeek = new Array(
13+
"Sunday",
14+
"Monday",
15+
"Tuesday",
16+
"Wednesday",
17+
"Thursday",
18+
"Friday",
19+
"Saturday"
20+
);
21+
```
22+
23+
- `[]`
24+
```js
25+
const daysOfWeek = [
26+
"Sunday",
27+
"Monday",
28+
"Tuesday",
29+
"Wednesday",
30+
"Thursday",
31+
"Friday",
32+
"Saturday",
33+
];
34+
```
1435

15-
### 数组常见操作
36+
## 数组常见操作
1637

17-
#### 添加元素
38+
### 添加元素
1839

1940
- 添加一个元素到数组的最后位置 `array.push(item)`
2041
- 在数组首位插入一个元素 `array.unshift(item)`
21-
- 在指定索引位置插入元素 `array.splice(index.js, 0, item)`
22-
splice() 第二个参数为 0 时,表示插入数据。
42+
- 在指定索引位置插入元素 `array.splice(index, 0, item)`
43+
> splice() 第二个参数为 0 时,表示插入数据。
2344
```js
2445
let myArray = [1, 2, 3];
2546
// 在 索引 0 的位置,插入 A
2647
myArray.splice(0, 0, "A");
2748
console.log(myArray); //--> ['A', 1, 2, 3]
2849
```
2950

30-
#### 删除元素
51+
### 删除元素
3152

3253
- 删除数组最后的元素 `array.pop(item)`
3354
- 删除数组首位的元素 `array.shift(item)`
3455
- 删除指定索引位置的元素 `array.splice(start, number)`
3556
例如:
3657
```js
3758
let myArray2 = [1, 2, 3, 4, 5];
38-
// 删除索引 3 位置起,2 个元素
39-
myArray2.splice(3, 2);
59+
// 删除索引 4 位置起,2 个元素
60+
myArray2.splice(4, 2);
4061
console.log(myArray2); //--> [1, 2, 3]
4162
```
4263

4364
### 修改元素
4465

45-
- 修改指定索引位置的元素 `array.splice(index.js, 1, item)`
66+
- 修改指定索引位置的元素 `array.splice(index, 1, item)`
4667
```js
4768
let myArray3 = [1, 2, 3, 4, 5, 6];
4869
// 修改 索引 1 的位置的元素为 AA
4970
myArray2.splice(1, 1, "AA");
5071
console.log(myArray3); //--> [1, "AA", 3, 4, 5, 6]
5172
```
52-
- 修改指定索引位置的几个元素 `array.splice(index.js, number, item)`
73+
- 修改指定索引位置的几个元素 `array.splice(index, number, item)`
5374
```js
5475
let myArray4 = [1, 2, 3, 4, 5, 6, 7];
5576
// 在 索引 2 的位置起,修改两个元素为 AA BB

assets/doc/03_JavaScript数据结构与算法(三)栈.md

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
## JavaScript 数据结构与算法(三)栈结构
1+
## JavaScript 数据结构与算法(三)
22

33
数组是一个线性结构,并且可以在数组的任意位置插入和删除元素。
44
但是有时候,我们为了实现某些功能,必须对这种任意性加以限制。
55
栈和队列就是比较常见的受限的线性结构。
66

7+
## 什么是栈
8+
79
栈(stack)是一种运算受限的线性表:
810

911
- `LIFO(last in first out)`表示就是后进入的元素,第一个弹出栈空间。类似于自动餐托盘,最后放上的托盘,往往先把拿出去使用。
@@ -12,19 +14,19 @@
1214
- 从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
1315

1416
如下图所示:
15-
![stack](https://user-images.githubusercontent.com/24516169/88035463-caf63780-cb74-11ea-910d-e396a83659ea.png)
17+
![image](https://cdn.jsdelivr.net/gh/XPoet/image-hosting@master/JavaScript-数据结构与算法/image.71xt32okr3k0.png)
1618

1719
栈的特点:**先进后出,后进先出**
1820

19-
### 程序中的栈结构
21+
## 程序中的栈结构
2022

2123
- 函数调用栈:A(B(C(D()))):
2224
即 A 函数中调用 B,B 调用 C,C 调用 D;在 A 执行的过程中会将 A 压入栈,随后 B 执行时 B 也被压入栈,函数 C 和 D 执行时也会被压入栈。所以当前栈的顺序为:A->B->C->D(栈顶);函数 D 执行完之后,会弹出栈被释放,弹出栈的顺序为 D->C->B->A;
2325

2426
- 递归:
2527
为什么没有停止条件的递归会造成栈溢出?比如函数 A 为递归函数,不断地调用自己(因为函数还没有执行完,不会把函数弹出栈),不停地把相同的函数 A 压入栈,最后造成栈溢出(Queue Overfloat)。
2628

27-
### 练习
29+
## 练习
2830

2931
题目:有 6 个元素 6,5,4,3,2,1 按顺序进栈,问下列哪一个不是合法的出栈顺序?
3032

@@ -42,9 +44,9 @@
4244
- C 答案:6543 进栈,3 出栈,4 出栈,之后应该 5 出栈而不是 6,所以错误。
4345
- D 答案:65432 进栈,2 出栈,3 出栈,4 出栈,1 进栈出栈,5 出栈,6 出栈。符合入栈顺序。
4446

45-
### 栈结构实现
47+
## 栈结构实现
4648

47-
#### 栈常见的操作
49+
### 栈常见的操作
4850

4951
- `push()` 添加一个新元素到栈顶位置。
5052
- `pop()` 移除栈顶的元素,同时返回被移除的元素。
@@ -53,12 +55,11 @@
5355
- `size()` 返回栈里的元素个数。这个方法和数组的 `length` 属性类似。
5456
- `toString()` 将栈结构的内容以字符串的形式返回。
5557

56-
#### JavaScript 代码实现栈结构
58+
### JavaScript 代码实现栈结构
5759

5860
```js
5961
// 栈结构的封装
6062
class Map {
61-
6263
constructor() {
6364
this.items = [];
6465
}
@@ -90,16 +91,16 @@ class Map {
9091

9192
// toString() 返回以字符串形式的栈内元素数据
9293
toString() {
93-
let result = '';
94+
let result = "";
9495
for (let item of this.items) {
95-
result += item + ' ';
96+
result += item + " ";
9697
}
9798
return result;
9899
}
99100
}
100101
```
101102

102-
#### 测试封装的栈结构
103+
### 测试封装的栈结构
103104

104105
```js
105106
// push() 测试
@@ -124,7 +125,7 @@ console.log(stack.size()); //--> 2
124125
console.log(stack.toString()); //--> 1 2
125126
```
126127

127-
### 栈结构的简单应用
128+
## 栈结构的简单应用
128129

129130
利用栈结构的特点封装实现十进制转换为二进制的方法。
130131

@@ -142,7 +143,7 @@ function dec2bin(dec) {
142143
dec = Math.floor(dec / 2); // 除数除以二,向下取整
143144
}
144145

145-
let binaryString = '';
146+
let binaryString = "";
146147
// 不断地从栈中取出元素(0 或 1),并拼接到一起。
147148
while (!stack.isEmpty()) {
148149
binaryString += stack.pop();
@@ -152,7 +153,7 @@ function dec2bin(dec) {
152153
}
153154
```
154155

155-
#### 测试
156+
### 测试
156157

157158
```js
158159
// dec2bin() 测试

assets/doc/04_JavaScript数据结构与算法(四)队列.md

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
## JavaScript 数据结构与算法(四)队列结构
1+
# JavaScript 数据结构与算法(四)队列
22

3-
### 认识队列
3+
## 认识队列
44

55
队列(Queue)是一种运算受限的线性表,特点:先进先出。(FIFO:First In First Out)
66

@@ -14,25 +14,25 @@
1414
- 排队,比如在电影院,商场,甚至是厕所排队。
1515
- 优先排队的人,优先处理。 (买票、结账、WC)。
1616

17-
![queue](https://user-images.githubusercontent.com/24516169/88038526-e9f6c880-cb78-11ea-859d-1faaaebed3bf.png)
17+
![image](https://cdn.jsdelivr.net/gh/XPoet/image-hosting@master/JavaScript-数据结构与算法/image.5mmiw2kdwbs0.png)
1818

19-
#### 队列图解
19+
### 队列图解
2020

21-
![queue](https://user-images.githubusercontent.com/24516169/88038782-45c15180-cb79-11ea-8439-bdc7e240d10d.png)
21+
![image](https://cdn.jsdelivr.net/gh/XPoet/image-hosting@master/JavaScript-数据结构与算法/image.mq92bw3am0g.png)
2222

23-
#### 队列在程序中的应用
23+
### 队列在程序中的应用
2424

2525
- 打印队列:计算机打印多个文件的时候,需要排队打印。
2626
- 线程队列:当开启多线程时,当新开启的线程所需的资源不足时就先放入线程队列,等待 CPU 处理。
2727

28-
### 队列的实现
28+
## 队列的实现
2929

3030
队列的实现和栈一样,有两种方案:
3131

3232
- 基于数组实现。
3333
- 基于链表实现。
3434

35-
#### 队列常见的操作
35+
### 队列常见的操作
3636

3737
- `enqueue(element)` 向队列尾部添加一个(或多个)新的项。
3838
- `dequeue()` 移除队列的第一(即排在队列最前面的)项,并返回被移除的元素。
@@ -41,11 +41,10 @@
4141
- `size()` 返回队列包含的元素个数,与数组的 length 属性类似。
4242
- `toString()` 将队列中的内容,转成字符串形式。
4343

44-
#### 代码实现
44+
### 代码实现
4545

4646
```js
4747
class Queue {
48-
4948
constructor() {
5049
this.items = [];
5150
}
@@ -77,25 +76,25 @@ class Queue {
7776

7877
// toString() 将队列中的元素以字符串形式返回
7978
toString() {
80-
let result = '';
79+
let result = "";
8180
for (let item of this.items) {
82-
result += item + ' ';
81+
result += item + " ";
8382
}
8483
return result;
8584
}
8685
}
8786
```
8887

89-
#### 测试代码
88+
### 测试代码
9089

9190
```js
9291
const queue = new Queue();
9392

9493
// enqueue() 测试
95-
queue.enqueue('a');
96-
queue.enqueue('b');
97-
queue.enqueue('c');
98-
queue.enqueue('d');
94+
queue.enqueue("a");
95+
queue.enqueue("b");
96+
queue.enqueue("c");
97+
queue.enqueue("d");
9998
console.log(queue.items); //--> ["a", "b", "c", "d"]
10099

101100
// dequeue() 测试
@@ -116,13 +115,13 @@ console.log(queue.size()); //--> 2
116115
console.log(queue.toString()); //--> c d
117116
```
118117

119-
### 队列的应用
118+
## 队列的应用
120119

121120
使用队列实现小游戏:**击鼓传花**
122121

123122
分析:传入一组数据集合和设定的数字 number,循环遍历数组内元素,遍历到的元素为指定数字 number 时将该元素删除,直至数组剩下一个元素。
124123

125-
#### 代码实现
124+
### 代码实现
126125

127126
```js
128127
// 利用队列结构的特点实现击鼓传花游戏求解方法的封装
@@ -161,11 +160,11 @@ function passGame(nameList, number) {
161160
}
162161
```
163162

164-
#### 测试代码
163+
### 测试代码
165164

166165
```js
167166
// passGame() 测试
168-
const names = ['lily', 'lucy', 'tom', 'tony', 'jack'];
167+
const names = ["lily", "lucy", "tom", "tony", "jack"];
169168
const targetIndex = passGame(names, 4);
170-
console.log('击鼓传花', names[targetIndex]); //--> lily
169+
console.log("击鼓传花", names[targetIndex]); //--> lily
171170
```

0 commit comments

Comments
 (0)