首页 > 其他分享 >队列结构

队列结构

时间:2022-08-22 23:11:52浏览次数:51  
标签:queue 队列 元素 ele priority item 结构

 

什么是队列?

队列(Queue),它是一种运算受限的线性表,先进先出(FIFO First In First Out)

  • 队列是一种受限的线性结构

  • 受限之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作

实现队列

创建

function Queue(){

}

 

队列的操作

  • enqueue(element):向队列尾部添加一个(或多个)新的项。

  • dequeue():移除队列的第一(即排在队列最前面的)项,并返回被移除的元素。

  • front():返回队列中第一个元素——最先被添加,也将是最先被移除的元素。队列不做任何变动(不移除元素,只返回元素信息——与Stack类的peek方法非常类似)。

  • isEmpty():如果队列中不包含任何元素,返回true,否则返回false

  • size():返回队列包含的元素个数,与数组的length属性类似。

 

封装队列的基本方法

// 封装队列方法
        class Queue {
            constructor() {
                this.item = []
            }
            size() {
                return this.item.length
            }
            enqueue = function (el) {
                this.item.push(el)
            }
            delqueue() {
                return this.item.shift()
            }
            front() {
                return this.item[0]
            }
            isEmpty() {
                return this.item.length == 0
            }
        }

 

// 操作队列
        var item =["hello","world","!"]
        let queue = new Queue()
        queue.enqueue(item)
        queue.enqueue("xxk")
        queue.enqueue("danny")

        queue.delqueue()
        console.log(queue.front())
        console.log(queue.isEmpty());
        console.log(queue.size());
        console.log(queue);

 

 

优先级队列的实现

// 优先级队列
        // 方法,传入ele:元素 pro:优先级
        class Node {
            constructor(ele, pro) {
                this.data = ele;
                this.priority = pro
            }
        }
        // 封装一个类PriorityQueue
        class PriorityQueue {
            constructor() {
                this.item = [];
            }

            enqueue(ele, priority) {
                // 创建新节点   或者let newnode = {data:ele,priority:priority}
                let newnode = new Node(ele, priority);

                if (this.item.length == 0) { 
                    // 如果是空队列,把node中参数ele priority传入函数
                    this.item.push(newnode)
                } else { //非空队列

                    let isAdd = false; //元素是否被添加到队列中

                    for (let i = 0; i < this.item.length; i++) { //依次比较优先级

                        if (newnode.priority < this.item[i].priority) { //新节点的优先级小于队列中元素的优先级
                            this.item.splice(i, 0, newnode);//将新节点插入到队列中
                            isAdd = true;
                            break;
                        }
                    }

                    // 循环遍历结束都没有比新节点要小的元素,直接添加到队列的最后
                    if (!isAdd) {
                        this.item.push(newnode)
                    }
                }
            }
        }
        let pq = new PriorityQueue()

 

标签:queue,队列,元素,ele,priority,item,结构
From: https://www.cnblogs.com/LIXI-/p/16614061.html

相关文章

  • 622. 设计循环队列
    622.设计循环队列设计你的循环队列实现。循环队列是一种线性数据结构,其操作表现基于FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓......
  • 数据结构(java版)
    复杂度什么是算法算法是用于解决特定问题一系列执行步骤如果单从执行效率上进行评估,可能会想到这么一种方案比较不同算法对同一组输入的执行处理时间,这种叫事后统计法......
  • C#-队列 Queue/栈 Stack
    队列先进先出,相当于排队买车票//队列Queue<string>queueList=newQueue<string>();//入队queueList.Enqueue("张三");queueList.Enqueue("李四");queueList.En......
  • 结构体数组使用StructLinq
    .NET性能优化-为结构体数组使用StructLinq 前言本系列的主要目的是告诉大家在遇到性能问题时,有哪些方案可以去优化;并不是要求大家一开始就使用这些方案来提升性能。......
  • MySQL表结构快速转化成数据库设计说明书的表格格式
    大家平时在实际研发中,肯定遇到过编写数据库设计说明书时,需要将表结构转化成表格格式并插入到word文档中.这里推荐一种方式,借助navicat工具即可轻松实现:1.navicat......
  • After Effects 教程,如何在 After Effects 中更改渲染队列中的设置?
    欢迎观看AfterEffects中文版教程,小编带大家学习AdobeAfterEffects的基本工具和使用技巧,了解如何在AE中使用渲染队列更改设置。使用「渲染队列」创建「渲染」时,可能......
  • Maven标准目录结构以及Maven的常用命令
    Maven标准目录结构   maven项目标准目录结构src/main/java目录:核心代码部分src/main/resources:配置文件部分src/test/java目录:测试代码部分src......
  • 什么是数据结构?
     数据结构是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素的集合。--百度 数据结构用途:解决问题方法的效率,根数据的组织方式有......
  • 仓库的种类和彼此关系与Maven标准目录结构
    仓库的种类和彼此关系仓库分为三类:本地仓库,远程仓库,中央仓库三类仓库直间的关系:在默认情况下启动一个Maven工程会从本地仓库找jar包,如果本地没有在连网状态下会从中央仓......
  • C++ 炼气期之结构体
    1.前言随着计算机向着不同领域的延伸,数据的概念已经不仅局限于数值型数据,计算机需要处理大量的非数值、且复杂的类型数据。为了能抽象地描述这些非数值、复杂类型的数据......