js数据结构与算法:队列

本文详细介绍了队列的概念及其特性,包括FIFO原则,然后通过JavaScript实现了一个队列类,包含了enqueue、dequeue、peek、size、isEmpty、clear和toString等方法。通过实例展示了如何使用这些方法,并进行了总结,加深了对队列的理解。
摘要由CSDN通过智能技术生成

a1bb1b5360294a37b7bcaaa63145e387.gif

☀️作者简介:大家好我是言不及行yyds
🐋个人主页:言不及行yyds的CSDN博客
🎁系列专栏:【js数据结构与算法】

目录

🚗.队列初认识

🚓.队列的各种方法

2.1 enqueue(向队列添加元素)

2.2 dequeue(向队列删除元素)

2.3  peek (查看队列头元素)

2.4 size和isEmpty(队列长度与是否为空)

2.5 clear(清空队列)

2.6 toString(创建 toString方法)

🚕.使用队列并总结

3.1使用队列

3.2总结


0b0af98ce3af4a4d86683eb888a8f6ca.png

 


1.队列初认识

队列是一种特殊的线性表

特殊之处在于它只允许在表的前端(front)进行删除操作,

而在表的后端(rear)进行插入操作,

和栈一样,队列是一种操作受限制的线性表。


队尾:进行插入操作的端,

队头:进行删除操作的端。

空队列:队列中没有元素时。

队列元素:队列的数据元素。

入队:在队列中插入一个队列元素,

出队:从队列中删除一个队列元素。

f3e51ee3d03d46799be9c3d6406c631a.png

 

因为队列只允许在一端插入,在另一端删除,

所以只有最早进入队列的元素才能最先从队列中删除,

故队列又称为先进先出(FIFO—first in first out)线性表


2.队列的各种方法


2.1 enqueue(向队列添加元素)

enqueue(elements)用于在队列的尾部添加

一个元素。那我们怎么来设计呢?

设计两个标记分别标记队列的头部(lowestCount)

队列的长度(count)。

关于设计所需要的数据结构就用对象来实现模拟队列吧。

声明类:

 class Queue{
   constructor(){
       //标记队列的长度
       this.count=0
       this.items={}
        //标记第一个元素
       this.lowestCount=0
     }
 }

声明enqueue方法

enqueue(element){
     this.items[this.count]=element
     this.count++
}

 首先我们知道,向队列插入元素必须插入在最后的位置。

所以我们在插入的时候,只要得到队列的长度,就可以在

队尾插入元素,将插入的元素赋值给this.items[this.count]


2.2 dequeue(向队列删除元素)

dequeue()用于移除队列的第一项,并返回第一项元素的值

我们可以先判断这个队列是否为空,取出第一个元素。

然后删除第一项,队列的长度减一。标记第一个元素

lowestCount加一。就很好的解决了删除元素的方法设计

 

 dequeue(){
  if(this.isEmpty()){
         return undefined
         }
    const result=this.items[this.lowestCount]
    delete this.items[this.lowestCount]
    this.lowestCount++
     return result
  }

 如果队列为空,那么我们就返回undefinded

将第一项的元素赋值给result,此时,删除第一项

然后将标记第一个元素的值加一

最后返回结果就完成了这个方法的设计


2.3  peek (查看队列头元素)

peek()用于返回队列的第一个元素。由于队列的特性

最先添加的,最先删除。。这个方法只返回第一个元素

并不会改变队列的结构

 

peek(){
   if(this.isEmpty()){
        return undefined
         }
   return this.items[this.lowestCount]
  }

 首先判断队列是否为空。为空则返回undefinded

如果不是则返回标记第一项元素的值


2.4 size和isEmpty(队列长度与是否为空)

size和isEmpty用于放回队列的长度,以及判断队列是否为空

关于这个方法的源码设计就比较简单了吧。

就是返回this.count-this.lowestCount的值以及返回this.count-this.lowestCount=0是否

为真。就完成了源码设计了

 

size(){
     return this.count-this.lowestCount
         }
 isEmpty(){
      return this.count-this.lowestCount===0
        }

2.5 clear(清空队列)

clear()用于清空队列的元素。实现起来

也比较简单,就是将存储的对象设置为空

this.count以及this.lowestCount设置为0就行了

 clear(){
    this.count=0
    this.items={}
    this.lowestCount=0
 }

2.6 toString(创建 toString方法)

toString()是我们添加的方法,就是将队列

一字符串的形式输出。那么怎么实现。

我们可以从第一项迭代添加字符的方法。

  toString(){
     if(this.isEmpty()){
           return undefined
             }
     let objString=`${this.items[this.lowestCount]}`
     for(let i=this.lowestCount+1;i<this.count;i++){
      objString=`${objString},${this.items[i]}`
        }
        return objString
}

3.使用队列并总结


3.1使用队列

接下来就是使用那几个方法了,我们先看一下全部代码

 class Queue{
     constructor(){
         this.count=0
         this.items={}
         this.lowestCount=0
            }
     enqueue(element){}
     dequeue(){}
     peek(){}
     size(){ }
     isEmpty(){}
     clear(){ }
      toString(){}
  }

 代码太多,完整代码,将前面的学完,在加上就行了


使用类Queue:

 const queue=new Queue()

 console.log(queue.isEmpty())

 queue.enqueue("john") 
 queue.enqueue("tom") 

 console.log(queue.toString())

 console.log(queue.size())

 console.log(queue.peek())

 queue.dequeue()

 console.log(queue.toString())
 console.log(queue.size())

cdfca9a527e3427c96c477976cf8d628.png

 

 


3.2总结

  1. 初步了解了队列的知识。学会了队列的基本元素
  2. 掌握了关于书写队列的方法的各种思想。
  3. 实践了自定义队列的方法。

 

✍在最后,如果觉得博主写的还行,

期待🍟点赞  🍬评论 🍪收藏

bff1d929fb1b449bb59a132200d18e0b.jpeg

 

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言不及行yyds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值