freeCodeCamp/guide/chinese/computer-science/data-structures/queues/index.md

46 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Queues
localeTitle: 尾巴
---
## 队列
队列是先进先出FIFO数据结构。许多算法在其核心使用队列来提高性能。
队列是基本的抽象数据类型ADT之一。它类似于我们在电影或超市中排队的队列。第一个到达的人将首先服务吗同样首先要删除要插入的第一个元素。有几种类型的队列
1. 简单队列(或队列)
2. 循环队列
3. 优先级队列
4. 出队(双端队列)
如果你能理解简单的队列(从这里开始将被称为'队列'),那么所有其他队列同样容易,几乎没有修改。
队列中最常见的操作是,
1. 添加/提供 - 将元素插入队列的末尾。
2. 删除/轮询 - 从队列的开头删除元素。
3. Peek - 返回队列开头的元素,但不会删除它。
4. Size / Count - 返回队列中当前存在的元素数。
5. IsEmpty - 检查队列是否为空。
使用数组或链表可以实现队列。以下是具有最常见操作的队列数据结构的简单数组实现。
\`\`\`的JavaScript
var Queue = function{ var queue = \[\]; var front = 0; var back = 0; 返回{ isEmptyfunction{ 返回前面> =后退|| queue.length === 0; } addfunctionelem{ / \*您也可以在JavaScript中执行queue.pushelem。 这就是他们用其他语言做的事情\* / queue \[back ++\] = elem; } removefunction{ ifthis.isEmpty{ return queue \[front ++\]; //或queue.shift } 其他{ 抛出新错误(“队列为空。”); } } peekfunction{ ifthis.isEmpty{ 返回队列\[前\]; } } } };
var queue = new Queue; 的console.logqueue.isEmpty; //真的 queue.add1; queue.add2; 的console.logqueue.remove; // 1 的console.logqueue.peek; // 2 的console.logqueue.remove; // 2 的console.logqueue.remove; //例外 \`\`\`
#### 应用
* 模拟
* 调度(作业调度,磁盘调度)
* 共享资源管理
* 键盘缓冲区
* 广度优先搜索
* 处理网络拥塞
#### 更多信息:
* [关于队列的更多信息 - GeeksForGeeks](http://www.geeksforgeeks.org/queue-data-structure/)
* [使用队列解决挑战 - Hackerrank](https://www.hackerrank.com/domains/data-structures/queues)
* [HackerRank堆栈和队列视频](https://www.youtube.com/watch?v=wjI1WNcIntg)