当前位置: 首页 > news >正文

【前端】js实现队列功能 先进后出 先进先出 等

也可以定义一个定时器 不断的去取队列 执行任务   用一个flag定义队列正在执行中, 如果没有执行 则定时器不断的去调用队列,(因为会随时添加一个任务到队列中)

队列任务结束后 自动取下一个队列  也可以边加队列 边取

队列定义

function Queue() {//初始化队列(使用数组实现)var items = []//入队this.enqueue = function (ele) {items.push(ele)}//出队this.dequeue = function () {return items.shift()}//返回首元素this.front = function () {return items[0]}//队列是否为空this.isEmpty = function () {return items.length == 0}//清空队列this.clear = function () {items = []}//返回队列长度this.size = function () {return items.length}//查看列队this.show = function () {return items}
}var queue = new Queue();
queue.enqueue('hello');
queue.enqueue('world');
queue.enqueue('css');
queue.enqueue('javascript');
queue.enqueue('node.js');
console.log(queue.isEmpty());    // false
console.log(queue.show());       //hello,world,css3,javascript,node.js 
console.log(queue.size());       //5
console.log(queue.front());      //hello
console.log(queue.dequeue());    //hello
console.log(queue.show());       //'world', 'css', 'javascript', 'node.js'
console.log(queue.clear());      
console.log(queue.size());       //0

优先队列

function PriorityQueue() {//初始化队列(使用数组实现)var items = []//因为存在优先级,所以插入的列队应该有一个优先级属性function queueEle(ele, priority) {this.ele = elethis.priority = priority}//入队this.enqueue = function (ele, priority) {let element = new queueEle(ele, priority)//为空直接入队if (this.isEmpty()) {items.push(element)}else {var qeueued = false; //是否满足优先级要求,并且已经入队for (let i = 0; i < this.size(); i++) {if (element.priority < items[i].priority) {items.splice(i, 0, element)qeueued = truebreak;}}//如果不满足要求,没有按要求入队,那么就直接从尾部入队if (!qeueued) items.push(element)}}//出队this.dequeue = function () {return items.shift()}//返回首元素this.front = function () {return items[0]}//队列是否为空this.isEmpty = function () {return items.length == 0}//清空队列this.clear = function () {items = []}//返回队列长度this.size = function () {return items.length}//查看列队this.show = function () {return items}
}var priorityQueue = new PriorityQueue();
priorityQueue.enqueue('优先级2-1', 2);
priorityQueue.enqueue('优先级1-1', 1);
priorityQueue.enqueue('优先级1-2', 1);
priorityQueue.enqueue('优先级3-1', 3);
priorityQueue.enqueue('优先级2-2', 2);
priorityQueue.enqueue('优先级1-3', 1);
priorityQueue.show(); // 按优先级顺序输出//输出
[
0:queueEle {ele: "优先级1-1", priority: 1},
1:queueEle {ele: "优先级1-2", priority: 1},
2:queueEle {ele: "优先级1-3", priority: 1},
3:queueEle {ele: "优先级2-1", priority: 2},
4:queueEle {ele: "优先级2-2", priority: 2},
5:queueEle {ele: "优先级3-1", priority: 3}
]

循环队列

function Queue() {//初始化队列(使用数组实现)var items = []//入队this.enqueue = function (ele) {items.push(ele)}//出队this.dequeue = function () {return items.shift()}//返回首元素this.front = function () {return items[0]}//队列是否为空this.isEmpty = function () {return items.length == 0}//清空队列this.clear = function () {items = []}//返回队列长度this.size = function () {return items.length}//查看列队this.show = function () {return items}
}/*** * @param {名单} names * @param {指定传递次数} num */
function onlyOne(names, num) {var queue = new Queue()//所有名单入队names.forEach(name => {queue.enqueue(name)});//淘汰的人名var loser = ''//只要还有一个以上的人在,就一直持续while (queue.size() > 1) {for (let i = 0; i < num; i++) {//把每次出队的人,再次入队 ,这样一共循环了num 次(击鼓传花一共传了num次)queue.enqueue(queue.dequeue())}//到这就次数就用完了,下一个就要出队了loser = queue.dequeue()console.log(loser + '被淘汰了')}//到这就剩下一个人了return queue.dequeue()
}var names = ['文科', '张凡', '覃军', '邱秋', '黄景']
var winner = onlyOne(names, 99)
console.log('金马奖影帝最终获得者是:' + winner)

http://www.lryc.cn/news/185920.html

相关文章:

  • 07.数据持久化之文件操作
  • nginx开启https配置之后网页无法访问问题处理
  • 文本嵌入层
  • 如何搭建自动化测试框架
  • 抄写Linux源码(Day17:你的键盘是什么时候生效的?)
  • 在原生html中使用less
  • 【Qt】顶层窗口和普通窗口区别以及用法
  • qt开发从入门到实战2
  • Android---字节码层面分析Class类文件
  • 【2023研电赛】东北赛区一等奖作品:基于FPGA的小型水下无线光通信端机设计
  • JWT授权为啥要在 Authorization标头里加个Bearer 呢
  • 一篇理解TCP协议
  • rk平台android12系统设置里面互联网选项中的以太网选项点击不了问题
  • ctrl+d和ctrl+c的区别
  • ChatGLM2-6B微调实践
  • YOLOv7独家改进FPN系列:结合新颖的 GhostSlimPAN 范式网络结构,进一步提升检测器性能
  • 12. Java异常及异常处理处理
  • 自定义hooks函数
  • Linux系统及Docker安装RabbitMq
  • 山东省赛二阶段第一部分解题思路
  • WebGoat 靶场 JWT tokens 四 五 七关通关教程
  • 【单元测试】如何使用 JUnit5 框架?
  • C#封装、继承和多态的用法详解
  • 数据结构与算法(持续更新)
  • HDLbits: ece241 2014 q4
  • LuatOS-SOC接口文档(air780E)-- gmssl - 国密算法
  • 【线性代数及其应用 —— 第一章 线性代数中的线性方程组】-1.线性方程组
  • vue实现拖拽排序
  • IS-IS
  • 【MySQL】为什么使用B+树做索引