IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构与算法--队列(Queue)--JS -> 正文阅读

[数据结构与算法]数据结构与算法--队列(Queue)--JS

数据结构与算法–队列(Queue)–JS

队列(Queue)

是一种受限的线性表,先进先出(FIFO, First In First Out),只能在前端进行删除操作,在后端进行插入操作

队列的实现和栈一样,有两种方案:

基于数组的实现、基于链表的实现

//封装队列类
function Queue() {
    //属性
    this.items = [];
    //方法
    //1.将元素加入到队列中
    Queue.prototype.enqueue = function (element) {
        this.items.push(element);
    }
    //2.从队列中删除前端元素
    Queue.prototype.dequeue = function () {
        return this.items.shift();
    }
    //3.查看前端的元素
    Queue.prototype.front = function () {
        return this.items[0];
    }
    //查看队列是否为空
    Queue.prototype.isempty = function () {
        return this.items.length == 0;
    }
    //查看队列中的元素个数
    Queue.prototype.size = function () {
        return this.items.length;
    }
    //6.toString方法
    Queue.prototype.toString = function () {
        var resultStr = '';
        for (var i = 0; i < this.items.length; i++) {
            resultStr += this.items[i];
        }
        return resultStr;
    }
}
var queue = new Queue();
queue.enqueue('abd');
alert(queue);

示例:击鼓传花

班级玩一个游戏,所有学生围城一个圈,从某位同学受力开始向旁边同学传花,这个时候某个人在击鼓,鼓声一停,话在谁手里,谁获胜
修改游戏规则:
几个朋友一起玩一个游戏,围成一圈,开始数一个固定的数(其实也可以每次随意一个数),数到某个数字的人自动淘汰,最后剩下的这个人获胜,请问最后剩下的人原来在哪个位置上

function passGame(nameList, num) {
    var queue = new Queue();
    //将所有人依次加入到队列中
    for (var i = 0; i < nameList.length; i++) {
        queue.enqueue(nameList[i]);
    }
    //开始数数字
    while (queue.size() > 1) {
        //不是num的时候,重新加入到队列的末尾
        //是num的时候,将其从队列中删除
        //num数字之前的人重新放入到队列末尾
        for (var i = 0; i < num; i++) {
            queue.enqueue(queue.dequeue());
        }
        //num对应的这个人,直接从队列中删除掉
        queue.dequeue();
    }
    //获取剩下的那个人
    var endName = queue.front();
    return nameList.indexOf(endName);
}
var names = ['li', 'zhao', 'liu', 'ha'];
alert(passGame(names, 2));

优先级队列

在插入一个元素的时候会考虑该数据的优先级,和其他数据优先级进行比较,比较后,可以得出这个元素在队列中的正确的位置,其他处理方式和基本的队列一样
优先级队列主要考虑的问题:
1.每个元素不再只是一个数据,而且包含数据的优先级
2.在添加方式中,根据优先级放入正确的位置

//封装优先级队列
function PriorityQueue() {
    //在PriorityQueue内重新创建一个类:可以理解为内部类
    function QueueElement(element, priority) {
        this.element = element;
        this.priority = priority;
    }
    //封装属性
    this.items = [];
    //实现插入方法
    PriorityQueue.prototype.enqueue = function (element, priority) {
        //创建QueueElement对象
        var queueElement = new QueueElement(element, priority);
        //判断队列是否为空
        if (this.items.length == 0) {
            this.items.push(queueElement);
        } else {
            //标识符
            var added = false;
            for (var i = 0; i < this.items.length; i++) {
                if (queueElement.priority < this.items[i].priority) {
                    this.items.splice(i, 0, queueElement);
                    added = true;
                    break;
                }
            }
            if (!added) {
                this.items.push(queueElement);
            }
        }
    }
    //其他属性和正常队列一致
    //2.从队列中删除前端元素
    PriorityQueue.prototype.dequeue = function () {
        return this.items.shift();
    }
    //3.查看前端的元素
    PriorityQueue.prototype.front = function () {
        return this.items[0];
    }
    //查看队列是否为空
    PriorityQueue.prototype.isempty = function () {
        return this.items.length == 0;
    }
    //查看队列中的元素个数
    PriorityQueue.prototype.size = function () {
        return this.items.length;
    }
    //6.toString方法
    PriorityQueue.prototype.toString = function () {
        var resultStr = '';
        for (var i = 0; i < this.items.length; i++) {
            resultStr += this.items[i].element + '-' + this.items[i].priority + ' ';
        }
        return resultStr;
    }
}
var pq = new PriorityQueue();
pq.enqueue('abc', 111);
alert(pq);
pq.enqueue('dac', 200);
pq.enqueue('aff', 50);
alert(pq);
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-25 12:43:47  更:2021-10-25 12:46:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:42:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码