Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /