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 3b0865e

Browse files
committed
update 文档
1 parent ee69b8d commit 3b0865e

7 files changed

+151
-127
lines changed

‎README.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@
1010
1111
## 目录
1212

13-
- [JavaScript 数据结构与算法(一)前言](./assets/doc/JavaScript数据结构与算法(一)前言.md)
14-
- [JavaScript 数据结构与算法(二)数组结构](./assets/doc/JavaScript数据结构与算法(二)数组结构.md)
15-
- [JavaScript 数据结构与算法(三)栈结构](./assets/doc/JavaScript数据结构与算法(三)栈结构.md)
16-
- [JavaScript 数据结构与算法(四)队列结构](./assets/doc/JavaScript数据结构与算法(四)队列结构.md)
17-
- [JavaScript 数据结构与算法(五)单向链表结构](./assets/doc/JavaScript数据结构与算法(五)单向链表结构.md)
13+
- [JavaScript 数据结构与算法(一)前言](assets/doc/01_JavaScript数据结构与算法(一)前言.md)
14+
- [JavaScript 数据结构与算法(二)数组](assets/doc/02_JavaScript数据结构与算法(二)数组.md)
15+
- [JavaScript 数据结构与算法(三)栈](assets/doc/03_JavaScript数据结构与算法(三)栈.md)
16+
- [JavaScript 数据结构与算法(四)队列](assets/doc/04_JavaScript数据结构与算法(四)队列.md)
17+
- [JavaScript 数据结构与算法(五)优先队列](assets/doc/05_JavaScript数据结构与算法(五)优先队列.md)
18+
- [JavaScript 数据结构与算法(六)单向链表](assets/doc/06_JavaScript数据结构与算法(六)单向链表.md)
1819

1920
## 测试环境
2021

File renamed without changes.
File renamed without changes.
File renamed without changes.

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

Lines changed: 2 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
**受限之处:**
88

99
- 只允许在表的前端(front)进行删除操作。
10-
- 在表的后端(rear)进行插入操作。
10+
- 只允许在表的后端(rear)进行插入操作。
1111

1212
生活中类似队列结构的场景:
1313

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

1717
![queue](https://user-images.githubusercontent.com/24516169/88038526-e9f6c880-cb78-11ea-859d-1faaaebed3bf.png)
@@ -169,123 +169,3 @@ const names = ['lily', 'lucy', 'tom', 'tony', 'jack'];
169169
const targetIndex = passGame(names, 4);
170170
console.log('击鼓传花', names[targetIndex]); //--> lily
171171
```
172-
173-
### 优先队列
174-
175-
优先级队列主要考虑的问题:
176-
177-
- 每个元素不再只是一个数据,还包含数据的优先级。
178-
- 在添加数据过程中,根据优先级放入到正确位置。
179-
180-
#### 优先队列的实现
181-
182-
##### 代码实现
183-
184-
```js
185-
class PriorityQueue {
186-
items = [];
187-
188-
// 内部类
189-
QueueElement = class {
190-
constructor(element, priority) {
191-
this.element = element;
192-
this.priority = priority;
193-
}
194-
};
195-
196-
// enqueue() 入队,将元素按优先级加入到队列中
197-
enqueue(element, priority) {
198-
// 根据传入的元素,创建 QueueElement 对象
199-
const queueElement = new this.QueueElement(element, priority);
200-
201-
// 判断队列是否为空
202-
if (this.isEmpty()) {
203-
// 如果为空,不用判断优先级,直接添加
204-
this.items.push(queueElement);
205-
} else {
206-
// 定义一个变量记录是否成功添加了新元素
207-
let added = false;
208-
209-
for (let i = 0; i < this.items.length; i++) {
210-
// 让新插入的元素进行优先级比较,priority 值越小,优先级越大
211-
if (queueElement.priority < this.items[i].priority) {
212-
// 在指定的位置插入元素
213-
this.items.splice(i, 0, queueElement);
214-
added = true;
215-
break;
216-
}
217-
}
218-
219-
// 如果遍历完所有元素,优先级都大于新插入的元素,就将新插入的元素插入到最后
220-
if (!added) {
221-
this.items.push(queueElement);
222-
}
223-
}
224-
}
225-
226-
// dequeue() 出队,从队列中删除前端元素,返回删除的元素
227-
dequeue() {
228-
return this.items.shift();
229-
}
230-
231-
// front() 查看队列的前端元素
232-
front() {
233-
return this.items[0];
234-
}
235-
236-
// isEmpty() 查看队列是否为空
237-
isEmpty() {
238-
return this.items.length === 0;
239-
}
240-
241-
// size() 查看队列中元素的个数
242-
size() {
243-
return this.items.length;
244-
}
245-
246-
toString() {
247-
let result = "";
248-
for (let item of this.items) {
249-
result += item.element + "-" + item.priority + " ";
250-
}
251-
return result;
252-
}
253-
}
254-
```
255-
256-
#### 测试代码
257-
258-
```js
259-
const priorityQueue = new PriorityQueue();
260-
261-
// 入队
262-
priorityQueue.enqueue("A", 10);
263-
priorityQueue.enqueue("B", 15);
264-
priorityQueue.enqueue("C", 11);
265-
priorityQueue.enqueue("D", 20);
266-
priorityQueue.enqueue("E", 18);
267-
268-
console.log(priorityQueue.items);
269-
//--> output:
270-
// QueueElement {element: "A", priority: 10}
271-
// QueueElement {element: "C", priority: 11}
272-
// QueueElement {element: "B", priority: 15}
273-
// QueueElement {element: "E", priority: 18}
274-
// QueueElement {element: "D", priority: 20}
275-
276-
// 出队
277-
priorityQueue.dequeue();
278-
priorityQueue.dequeue();
279-
console.log(priorityQueue.items);
280-
//--> output:
281-
// QueueElement {element: "B", priority: 15}
282-
// QueueElement {element: "E", priority: 18}
283-
// QueueElement {element: "D", priority: 20}
284-
285-
console.log(priorityQueue.isEmpty()); //--> false
286-
console.log(priorityQueue.size()); //--> 3
287-
console.log(priorityQueue.toString()); //--> B-15 E-18 D-20
288-
```
289-
290-
### 数组、栈和队列图解
291-
![array-stack-queue](https://user-images.githubusercontent.com/24516169/88051118-b02ebd80-cb8a-11ea-9acf-4329cbbff6fc.png)
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
## JavaScript 数据结构与算法(五)优先队列
2+
3+
4+
生活中类似**优先队列**的场景:
5+
6+
- 优先排队的人,优先处理。 (买票、结账、WC)。
7+
- 排队中,有紧急情况(特殊情况)的人可优先处理。
8+
9+
10+
### 优先队列
11+
12+
优先级队列主要考虑的问题:
13+
14+
- 每个元素不再只是一个数据,还包含优先级。
15+
- 在添加元素过程中,根据优先级放入到正确位置。
16+
17+
#### 优先队列的实现
18+
19+
##### 代码实现
20+
21+
```js
22+
// 优先队列内部的元素类
23+
class QueueElement {
24+
constructor(element, priority) {
25+
this.element = element;
26+
this.priority = priority;
27+
}
28+
}
29+
30+
// 优先队列类(继承 Queue 类)
31+
export class PriorityQueue extends Queue {
32+
33+
constructor() {
34+
super();
35+
}
36+
37+
// enqueue(element, priority) 入队,将元素按优先级加入到队列中
38+
// 重写 enqueue()
39+
enqueue(element, priority) {
40+
// 根据传入的元素,创建 QueueElement 对象
41+
const queueElement = new QueueElement(element, priority);
42+
43+
// 判断队列是否为空
44+
if (this.isEmpty()) {
45+
// 如果为空,不用判断优先级,直接添加
46+
this.items.push(queueElement);
47+
} else {
48+
// 定义一个变量记录是否成功添加了新元素
49+
let added = false;
50+
51+
for (let i = 0; i < this.items.length; i++) {
52+
// 让新插入的元素进行优先级比较,priority 值越小,优先级越大
53+
if (queueElement.priority < this.items[i].priority) {
54+
// 在指定的位置插入元素
55+
this.items.splice(i, 0, queueElement);
56+
added = true;
57+
break;
58+
}
59+
}
60+
61+
// 如果遍历完所有元素,优先级都大于新插入的元素,就将新插入的元素插入到最后
62+
if (!added) {
63+
this.items.push(queueElement);
64+
}
65+
}
66+
}
67+
68+
// dequeue() 出队,从队列中删除前端元素,返回删除的元素
69+
// 继承 Queue 类的 dequeue()
70+
dequeue() {
71+
return super.dequeue();
72+
}
73+
74+
// front() 查看队列的前端元素
75+
// 继承 Queue 类的 front()
76+
front() {
77+
return super.front();
78+
}
79+
80+
// isEmpty() 查看队列是否为空
81+
// 继承 Queue 类的 isEmpty()
82+
isEmpty() {
83+
return super.isEmpty();
84+
}
85+
86+
// size() 查看队列中元素的个数
87+
// 继承 Queue 类的 size()
88+
size() {
89+
return super.size();
90+
}
91+
92+
// toString() 将队列中元素以字符串形式返回
93+
// 重写 toString()
94+
toString() {
95+
let result = '';
96+
for (let item of this.items) {
97+
result += item.element + '-' + item.priority + ' ';
98+
}
99+
return result;
100+
}
101+
}
102+
```
103+
104+
#### 测试代码
105+
106+
```js
107+
const priorityQueue = new PriorityQueue();
108+
109+
// 入队 enqueue() 测试
110+
priorityQueue.enqueue('A', 10);
111+
priorityQueue.enqueue('B', 15);
112+
priorityQueue.enqueue('C', 11);
113+
priorityQueue.enqueue('D', 20);
114+
priorityQueue.enqueue('E', 18);
115+
console.log(priorityQueue.items);
116+
//--> output:
117+
// QueueElement {element: "A", priority: 10}
118+
// QueueElement {element: "C", priority: 11}
119+
// QueueElement {element: "B", priority: 15}
120+
// QueueElement {element: "E", priority: 18}
121+
// QueueElement {element: "D", priority: 20}
122+
123+
// 出队 dequeue() 测试
124+
priorityQueue.dequeue();
125+
priorityQueue.dequeue();
126+
console.log(priorityQueue.items);
127+
//--> output:
128+
// QueueElement {element: "B", priority: 15}
129+
// QueueElement {element: "E", priority: 18}
130+
// QueueElement {element: "D", priority: 20}
131+
132+
// isEmpty() 测试
133+
console.log(priorityQueue.isEmpty()); //--> false
134+
135+
// size() 测试
136+
console.log(priorityQueue.size()); //--> 3
137+
138+
// toString() 测试
139+
console.log(priorityQueue.toString()); //--> B-15 E-18 D-20
140+
```
141+
142+
### 补充:数组、栈和队列图解
143+
![array-stack-queue](https://user-images.githubusercontent.com/24516169/88051118-b02ebd80-cb8a-11ea-9acf-4329cbbff6fc.png)
File renamed without changes.

0 commit comments

Comments
(0)

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