JavaScript从零实现队列数据结构
需积分: 0 21 浏览量
更新于2024-08-04
收藏 4KB MD 举报
"JavaScript实现队列的两种方法:基于数组和基于对象"
在JavaScript中,队列是一种先进先出(FIFO,First In First Out)的数据结构,它遵循特定的规则,即新元素添加到队列的尾部,而移除元素则从队列的头部开始。下面将详细介绍如何使用JavaScript实现队列。
### 基于数组的实现
```javaScript
class Queue {
constructor() {
this.items = []; // 利用数组存储队内元素
}
// 向队列尾部添加一个(或多个)新的项
enqueue(element) {
this.items.push(element);
}
// 移除队列的第一项(即排在队列最前面的项)并返回被移除的元素
dequeue() {
return this.items.shift();
}
// 返回队列中第一个元素——最先被添加,也将是最先被移除的元素
peek() {
return this.items[0];
}
// 如果队列中不包含任何元素,返回true,否则返回false
isEmpty() {
return this.items.length === 0;
}
// 移除队列里的所有元素
clear() {
this.items = [];
}
// 返回队列包含的元素个数,与数组的length属性类似
size() {
return this.items.length;
}
}
const queue = new Queue();
console.log(queue.isEmpty()); // true
queue.enqueue("a");
queue.enqueue("b");
console.log(queue.peek()); // a
queue.enqueue("c");
console.log(queue.size()); // 3
console.log(queue.isEmpty()); // false
queue.enqueue("d");
queue.dequeue();
queue.dequeue();
console.log(queue.size()); // 2
```
### 基于对象的实现
在基于对象的实现中,我们使用一个对象来存储元素,并通过一个`count`变量来追踪元素的顺序。
```javaScript
class Queue {
constructor() {
this.count = 0;
this.items = {}; // 使用对象存储元素
this.lowestCount = 0; // 追踪第一个元素
}
enqueue(element) {
this.items[this.count] = element;
this.count++;
}
dequeue() {
if (this.isEmpty()) return undefined;
const removedElement = this.items[this.lowestCount];
delete this.items[this.lowestCount];
this.lowestCount++;
return removedElement;
}
peek() {
return this.isEmpty() ? undefined : this.items[this.lowestCount];
}
isEmpty() {
return this.count - this.lowestCount === 0;
}
clear() {
this.count = 0;
this.lowestCount = 0;
this.items = {};
}
size() {
return this.count - this.lowestCount;
}
}
const queue = new Queue();
// 示例代码...
```
在这两种实现中,`enqueue`方法用于向队列尾部添加元素,`dequeue`方法用于移除并返回队列头部的元素,`peek`方法用于查看但不移除队列头部的元素,`isEmpty`方法检查队列是否为空,`clear`方法清空队列,而`size`方法返回队列中的元素数量。基于对象的实现更灵活,因为它允许存储非数字键,但可能会有额外的内存开销,因为对象需要维护原型链和属性引用。而基于数组的实现则更加简单且高效,适用于大多数情况。
2019-01-26 上传
2024-02-12 上传
点击了解资源详情
2021-06-20 上传
2021-07-13 上传
2020-12-11 上传
2020-10-15 上传
2021-01-21 上传
2020-10-21 上传
一只前端小菜鸟~
- 粉丝: 762
- 资源: 2
最新资源
- 开源通讯录备份系统项目,易于复刻与扩展
- 探索NX二次开发:UF_DRF_ask_id_symbol_geometry函数详解
- Vuex使用教程:详细资料包解析与实践
- 汉印A300蓝牙打印机安卓App开发教程与资源
- kkFileView 4.4.0-beta版:Windows下的解压缩文件预览器
- ChatGPT对战Bard:一场AI的深度测评与比较
- 稳定版MySQL连接Java的驱动包MySQL Connector/J 5.1.38发布
- Zabbix监控系统离线安装包下载指南
- JavaScript Promise代码解析与应用
- 基于JAVA和SQL的离散数学题库管理系统开发与应用
- 竞赛项目申报系统:SpringBoot与Vue.js结合毕业设计
- JAVA+SQL打造离散数学题库管理系统:源代码与文档全览
- C#代码实现装箱与转换的详细解析
- 利用ChatGPT深入了解行业的快速方法论
- C语言链表操作实战解析与代码示例
- 大学生选修选课系统设计与实现:源码及数据库架构