【JS数据结构】线性结构——队列

目录

一. 队列结构

1.队列(Queue)

2.生活中类似的队列结构

3.队列的图解

4.队列在程序中的应用

二. 队列实现

1.队列的创建

1.1 创建自己的类, 来表示一个队列

1.2 代码解析

2.队列的操作

2.1 方式一

2.2 方式二——建议使用

三. 优先级队列

1.优先级队列的特点

2.优先级队列应用

3.优先级队列的实现

四. 队列面试题

1.击鼓传花


一. 队列结构

1.队列(Queue)

  • 队列是一种受限的线性结构
  • 受限之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,符合先进先出(FIFO First In First Out)

2.生活中类似的队列结构

  • 生活中类似队列的场景就是非常多了, 比如在电影院, 商场, 甚至是厕所排队.
  • 优先排队的人, 优先处理. (买票, 结账, WC)

3.队列的图解

4.队列在程序中的应用

  • 打印队列:
    • 有五份文档需要打印, 这些文档会按照次序放入到打印队列中.
    • 打印机会依次从队列中取出文档, 优先放入的文档, 优先被取出, 并且对该文档进行打印.
    • 以此类推, 直到队列中不再有新的文档.
  • 线程队列:
    • 在进行多线程开发时, 我们不可能无限制的开启新的线程.
    • 这个时候, 如果有需要开启线程处理任务的情况, 我们就会使用线程队列.
    • 线程队列会依照次序来启动线程, 并且处理对应的任务.

二. 队列实现

队列的实现和栈一样,有两种方案:基于数组实现;基于链表实现

本次代码都基于数组实现。(基于数组的缺点:如果删除队头元素,之后的所有元素都需要向前移)

1.队列的创建

1.1 创建自己的类, 来表示一个队列

        // 1.封装队列类(基于对象方式)
        function Queue() {
            //属性
            this.items = []

            //方法

        }

        //2.使用队列
        var queue = new Queue()

1.2 代码解析

  • 创建了一个Queue构造函数, 用户创建队列的类.
  • 在构造函数中, 定义了一个变量, 这个变量可以用于保存当前队列对象中所有的元素. (和创建栈非常相似)
  • 这个变量是一个数组类型. 我们之后在队列中添加元素或者删除元素, 都是在这个数组中完成的.
  • 队列和栈一样, 有一些相关的操作方法, 通常无论是什么语言, 操作都是比较类似的.

2.队列的操作

  • enqueue(element):向队列尾部添加一个(或多个)新的项。
  • dequeue():移除队列的第一(即排在队列最前面的)项,并返回被移除的元素。
  • front():返回队列中第一个元素——最先被添加,也将是最先被移除的元素。队列不做任何变动(不移除元素,只返回元素信息——与Stack类的peek方法非常类似)。
  • isEmpty():如果队列中不包含任何元素,返回true,否则返回false。
  • size():返回队列包含的元素个数,与数组的length属性类似。
  • toString():将队列中内容,转成字符串形式。
  • clear():删除队列中所有元素

2.1 方式一

        // 1.自定义队列
        function Queue() {
            var items = []

            // 队列操作的方法
            // 1.1enter queue方法
            this.enqueue = function (element) {
                items.push(element)
            }

            // 1.2delete queue方法:先进入队列中的元素, 先从队列中取出. 因此, 应该删除第一个元素
            this.dequeue = function () {
                return items.shift()
            }

            // 1.3查看前端的元素
            this.front = function () {
                return items[0]
            }

            // 1.4查看队列是否为空
            this.isEmpty = function () {
                return items.length == 0
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值