Javascript实现队列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Javascript实现队列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2907字,纯文字阅读大概需要5分钟。
内容图文
![Javascript实现队列](/upload/InfoBanner/zyjiaocheng/851/440225e39bc04b91b11289e15225fcc8.jpg)
github主页:https://github.com/A15162252289
什么是队列
队列是遵循FIFO(First In First Out)原则的一组有序的项。队列在尾部添加新元素,从顶部移除元素。最新添加的元素必须排在队列的末尾。
在计算机科学中,一个常见的例子就是打印队列。比如说,我们需要打印五份文档。我们会打开每个文档,然后点击打印按钮。每个文档都会被发送到打印队列。第一个发送到打印队列的会优先被打印,一次类推,直至打印完所有文档。
怎样实现队列
- 使用构造函数实现队列
function Queue () {
let items = []; //初始化用来存储队列元素的数组
this.enqueue = function (element) {
items.push(element); //向队列底部添加元素
};
this.dequeue = function () {
return items.shift(); //移除顶部的一个元素并返回该元素
};
this.front = function () {
return items[0]; //仅返回顶部的第一个元素
};
this.isEmpty = function () {
return items.length === 0; //判断队列是否为空
};
this.size = function () {
return items.length; //查看队列的长度
};
}
实例化:
let queue = new Queue();
queue.isEmpty(); //true
queue.enqueue(2); //添加元素2
queue.size(); //1
queue.dequeue(); //返回元素2
2.使用**ES6**类实现队列
let Queue2 = (function () {
const items = new WeakMap();
class Queue2 {
constructor () {
items.set(this, []);
}
enqueue (element) {
let q = items.get(this);
q.push(element); //向队列底部添加元素
}
dequeue () {
let q = items.get(this);
let t = q.shift();
return t; //移除顶部的一个元素并返回该元素
}
front () {
let q = items.get(this);
return q[0]; //仅返回顶部的第一个元素
}
isEmpty () {
let q = items.get(this);
return q.length === 0; //判断队列是否为空
}
size () {
let q = items.get(this);
return q.length; //查看队列的长度
}
}
return Queue2;
})();
3.优先队列的实现:
function PriorityQueue () {
let items = [];
function QueueElement (element, priority) {
this.element = element;
this.priority = priority;
}
this.enqueue = function (element, priority) {
let queueElement = new QueueElement(element, priority); //创建元素对象
let added = false;
items.forEach((item, index) => {
if (queueElement.priority < item.priority) {
items.splice(index, 0, queueElement);
added = true;
return false;
}
}); //遍历整个队列,找出优先级比queueElement低的元素,并把queueElement插在该元素前面,终止遍历
if (!added) {
items.push(priority);
}
};
//其他方法
}
4.循环队列的实现:
//循环队列----击鼓传花
function hotPotato (nameList, num) {
if (!(nameList instanceof Array)) {
throw new Error('请第一个参数应为数组nameList');
}
if (typeof num !== 'number') {
throw new Error('第二个参数应为数字');
}
let queue = new Queue(); //初始化队列
nameList.forEach(item => {
queue.enqueue(item);
});
let eliminated = ''; //初始化被淘汰的人
while (queue.size() > 1) {
for (let i = 0; i < num; i++) {
queue.enqueue(queue.dequeue());
}
eliminated = queue.dequeue(); //每轮被淘汰的人
console.log(eliminated + ' is out');
}
let winner = queue.dequeue();
console.log('winner is ' + winner);
}
实例化:
let nameList = [1, 2, 3, 4, 5, 6, 7];
let num = 5;
hotPotato(nameList, num);
// 输出如下:
// 6 is out
// 5 is out
// 7 is out
// 2 is out
// 1 is out
// 4 is out
// winner is 3
Github源代码:link.
内容总结
以上是互联网集市为您收集整理的Javascript实现队列全部内容,希望文章能够帮你解决Javascript实现队列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。