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 e703c55

Browse files
committed
增加数据结构与算法文档目录
1 parent 907425f commit e703c55

File tree

3 files changed

+177
-0
lines changed

3 files changed

+177
-0
lines changed

‎README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,20 @@
11
# JavaScript 数据结构与算法
2+
3+
## 文档目录
4+
5+
- [JavaScript 数据结构与算法(一)前言](./assets/doc/JavaScript数据结构与算法(一)前言/)
6+
- [JavaScript 数据结构与算法(二)数组结构](./assets/doc/JavaScript数据结构与算法(二)数组结构/)
7+
8+
## 代码测试环境
9+
10+
### 安装依赖
11+
```bash
12+
npm install
13+
```
14+
15+
### 启动服务
16+
```bash
17+
npm run start
18+
```
19+
20+
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
# JavaScript 数据结构与算法(一)前言
2+
3+
## 什么是数据结构?
4+
5+
### 数据结构的定义
6+
7+
- 官方定义
8+
9+
10+
11+
- 民间定义
12+
13+
- "数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。" --- 《数据结构、算法与应用》
14+
- "数据结构是 ADT(抽象数据类型 Abstract Data Type)的物理实现。" --- 《数据结构与算法分析》
15+
- "数据结构(data structure)是计算机中存储、组织数据的方式。通常情况下,精心选择的数据结构可以带来最优效率的算法。" ---中文维基百科
16+
17+
- 从自己角度认识
18+
19+
在计算机中,存储和组织数据的方式。
20+
21+
### 数据结构在生活中应用
22+
23+
我们知道,计算机中数据量非常庞大,如何以高效的方式组织和存储呢?
24+
25+
例如:一个庞大的图书馆中存放了大量的书籍,我们不仅仅要把书放进入,还应该在合适的时候能够取出来。
26+
27+
图书摆放要使得两个相关操作方便实现:
28+
29+
- 操作 1:新书怎么插入?
30+
- 操作 2:怎么找到某本指定的书?
31+
32+
图书各种摆放方式:
33+
34+
- 方法 1:随便放
35+
36+
- 操作 1:哪里有空位放哪里。
37+
- 操作 2:找某本书,累死。
38+
39+
- 方法 2:按照书名的拼音字母顺序排放
40+
41+
- 操作 1:新进一本《阿 Q 正传》, 按照字母顺序找到位置,插入。
42+
- 操作 2:二分查找法。
43+
44+
- 方法 3:把书架划分成几块区域,按照类别存放,类别中按照字母顺序
45+
46+
- 操作 1:先定类别,二分查找确定位置,移出空位。
47+
- 操作 2:先定类别,再二分查找。
48+
49+
结论:
50+
51+
- 解决问题方法的效率,根据数据的组织方式有关。
52+
- 计算机中存储的数据量相对于图书馆的书籍来说数据量更大,数据更加多。
53+
- 以什么样的方式,来存储和组织我们的数据才能在使用数据时更加方便呢?
54+
- 这就是数据结构需要考虑的问题。
55+
56+
### 常见的数据结构
57+
58+
- 数组(Aarray)
59+
- 栈(Stack)
60+
- 链表(Linked List)
61+
- 图(Graph)
62+
- 散列表(Hash)
63+
- 队列(Queue)
64+
- 树(Tree)
65+
- 堆(Heap)
66+
67+
> 注意:数据结构与算法与语言无关,常见的编程语言都有**直接或间接**的使用上述常见的数据结构。
68+
69+
## 什么是算法?
70+
71+
### 算法(Algorithm)的定义
72+
73+
- 一个有限指令集,每条指令的描述不依赖于语言。
74+
- 接收一些输入(有些情况下不需要输入)。
75+
- 产生输出。
76+
- 一定在有限步骤之后终止。
77+
78+
### 算法通俗理解
79+
80+
- Algorithm 这个单词本意就是解决问题的办法/步骤逻辑。
81+
- 数据结构的实现,离不开算法。
82+
83+
### 算法案例
84+
85+
假如上海和杭州之间有一条高架线,高架线长度是 1,000,000 米,有一天高架线中有其中一米出现了故障,请你想出一种算法,可以快速定位到处问题的地方。
86+
87+
- 线性查找
88+
89+
- 从上海的起点开始一米一米的排查,最终一定能找到出问题的线段。
90+
- 但是如果线段在另一头,我们需要排查 1,000,000 次,这是最坏的情况,平均需要 500,000 次。
91+
92+
- 二分查找
93+
94+
- 从中间位置开始排查,看一下问题出在上海到中间位置,还是中间到杭州的位置。
95+
- 查找对应的问题后,再从中间位置分开,重新锁定一般的路程。
96+
- 最坏的情况,需要多少次可以排查完呢? 最坏的情况是 20 次就可以找到出问题的地方。
97+
- 怎么计算出来的呢? log(1000000, 2),以 2 位底,1000000 的对数 ≈ 20。
98+
99+
结论:
100+
你会发现,解决问题的办法有很多,但是好的算法对比于差的算法,效率天壤之别。
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
## JavaScript 数据结构与算法(二)数组结构
2+
3+
几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构。
4+
数组通常情况下用于存储一系列同一种数据类型的值。
5+
但在 JavaScript 里,数组中可以保存不同类型的值。但我们还是要遵守最佳实践,别这么做(大多数语言都没这个能力)。
6+
7+
### 创建和初始化数组
8+
9+
- new Array()
10+
`const daysOfWeek = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday','Thursday', 'Friday', 'Saturday');`
11+
12+
- []
13+
`const daysOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];`
14+
15+
### 数组常见操作
16+
17+
#### 添加元素
18+
19+
- 添加一个元素到数组的最后位置 `array.push(item)`
20+
- 在数组首位插入一个元素 `array.unshift(item)`
21+
- 在指定索引位置插入元素 `array.splice(index, 0, item)`
22+
splice() 第二个参数为 0 时,表示插入数据。
23+
```js
24+
let myArray = [1, 2, 3];
25+
// 在 索引 0 的位置,插入 A
26+
myArray.splice(0, 0, "A");
27+
console.log(myArray); //--> ['A', 1, 2, 3]
28+
```
29+
30+
#### 删除元素
31+
32+
- 删除数组最后的元素 `array.pop(item)`
33+
- 删除数组首位的元素 `array.shift(item)`
34+
- 删除指定索引位置的元素 `array.splice(start, number)`
35+
例如:
36+
```js
37+
let myArray2 = [1, 2, 3, 4, 5];
38+
// 删除索引 4 位置起,2 个元素
39+
myArray2.splice(4, 2);
40+
console.log(myArray2); //--> [1, 2, 3]
41+
```
42+
43+
### 修改元素
44+
45+
- 修改指定索引位置的元素 `array.splice(index, 1, item)`
46+
```js
47+
let myArray3 = [1, 2, 3, 4, 5, 6];
48+
// 修改 索引 1 的位置的元素为 AA
49+
myArray2.splice(1, 1, "AA");
50+
console.log(myArray3); //--> [1, "AA", 3, 4, 5, 6]
51+
```
52+
- 修改指定索引位置的几个元素 `array.splice(index, number, item)`
53+
```js
54+
let myArray4 = [1, 2, 3, 4, 5, 6, 7];
55+
// 在 索引 2 的位置起,修改两个元素为 AA BB
56+
myArray2.splice(2, 2, "AA", "BB");
57+
console.log(myArray3); //--> [1, 2, "AA", "BB", 5, 6, 7]
58+
```

0 commit comments

Comments
(0)

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