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);
目录
相关文章
|
2月前
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
77 0
|
3月前
|
JavaScript 前端开发 API
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)(下)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
35 0
|
9月前
|
存储 算法 JavaScript
JavaScript 中的数据结构与算法:数组、链表、栈、队列等
在JavaScript中,数据结构和算法是非常重要的主题,它们用于有效地组织和处理数据。下面介绍几种常见的数据结构和算法:
|
4月前
|
JavaScript 前端开发
JavaScript题解剑指offer : 09. 用两个栈实现队列
JavaScript题解剑指offer : 09. 用两个栈实现队列
24 0
|
8月前
|
JavaScript 前端开发
javascript队列
javascript队列
|
消息中间件 缓存 前端开发
JS案例:实现一个简单的任务队列-TaskQueue
JS案例:实现一个简单的任务队列-TaskQueue
398 0
JS案例:实现一个简单的任务队列-TaskQueue
|
存储 算法 JavaScript
JS算法探险之队列(Queue)
知识点简讲 滑动窗口 二叉树的广度优先搜索(BFS)
|
存储 JavaScript 前端开发
「数据结构与算法Javascript描述」队列
「数据结构与算法Javascript描述」队列
「数据结构与算法Javascript描述」队列
|
JavaScript
JS实现栈和队列
JS实现栈和队列
JS实现栈和队列
|
存储 前端开发 JavaScript
JavaScript总结:关于堆栈、队列中push()、pop()、shift()、unshift()使用方法的理解
JavaScript总结:关于堆栈、队列中push()、pop()、shift()、unshift()使用方法的理解
189 0
JavaScript总结:关于堆栈、队列中push()、pop()、shift()、unshift()使用方法的理解