JS 实现队列 #20

简介: JS 实现队列 #20

队列


队列是一种列表,与栈相反,特点表现为先入先出(First-in-First-Out,FIFO)结构。常见的例子就是银行排队,先到人的先办理业务。


实现


使用数组实现,js中的数组相对于其他语言,有它自己的优势,比如push()方法,向数组末尾追加元素并更新数组长度,shift()方法,取出数据第一项元素。所以,利用数组就很容易实现队列。

function queue() {
    this.dataStore = [];
    this.length = length;
    this.iqueue = iqueue;
    this.oqueue = oqueue;
    this.front = front;
    this.back = back;
    this.clear = clear;
}
function length() {
    return this.dataStore.length;
}
function iqueue(element) {
    return this.dataStore.push(element);
}
function oqueue() {
    return this.dataStore.shift();
}
function front() {
    return this.dataStore[0];
}
function back() {
    return this.dataStore[this.dataStore.length - 1];
}
function clear() {
    return this.dataStore = [];
}
var q = new queue();
console.log(q.iqueue(1));
console.log(q.length());
console.log(q.front());
console.log(q.oqueue());
console.log(q.length());


使用队列实现舞蹈员入场问题


function dancer(name, sex) {
    this.name = name;
    this.sex = sex;
}
function getDancer(males, females) {
    var datas = [{
            name: 'a',
            sex: 1
        },
        {
            name: 'b',
            sex: 0
        },
        {
            name: 'c',
            sex: 1
        },
        {
            name: 'd',
            sex: 0
        }
    ]
    for (var i = 0, len = datas.length; i < len; i++) {
        if (datas[i].sex === 0) {
            males.iqueue(new dancer(datas[i].name, datas[i].sex));
        } else {
            females.iqueue(new dancer(datas[i].name, datas[i].sex));
        }
    }
}
function dance(males, females) {
    var person;
    while (males.length() != 0 && females.length() != 0) {
        person = males.oqueue();
        console.log('Males dancer is:' + person.name);
        person = females.oqueue();
        console.log('Females dancer is:' + person.name);
    }
}
var males = new queue();
var females = new queue();
getDancer(males, females);
dance(males, females);
目录
相关文章
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
3493 0
|
JavaScript 前端开发 API
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)(下)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
160 0
|
JavaScript 前端开发
js事件队列
js事件队列
193 55
|
12月前
|
JavaScript 前端开发 API
详解队列在前端的应用,深剖JS中的事件循环Eventloop,再了解微任务和宏任务
该文章详细讲解了队列数据结构在前端开发中的应用,并深入探讨了JavaScript的事件循环机制,区分了宏任务和微任务的执行顺序及其对前端性能的影响。
|
11月前
|
存储 JavaScript 前端开发
js事件队列
【10月更文挑战第15天】
157 6
|
JavaScript 前端开发
JavaScript——一个简单的队列Demo
JavaScript——一个简单的队列Demo
95 4
|
JavaScript 前端开发
js事件队列
js事件队列
62 0
|
存储 算法 JavaScript
JavaScript 中的数据结构与算法:数组、链表、栈、队列等
在JavaScript中,数据结构和算法是非常重要的主题,它们用于有效地组织和处理数据。下面介绍几种常见的数据结构和算法:
230 0
|
JavaScript
数据结构(用 JS 实现栈和队列【三种方式】)
数据结构(用 JS 实现栈和队列【三种方式】)
186 0
|
前端开发 JavaScript 算法
JavaScript 中实现常见数据结构:栈、队列与树
JavaScript 中实现常见数据结构:栈、队列与树
208 0