js数据结构中的队列

什么是队列?

队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序的项。
队列从尾部添加元素,从顶部移除元素。新添加的元素必须排在队列的末尾。

创建一个队列的步骤。

1、 enqueue(element(s)):向队列尾部添加一个(或多个)新的项。
2、dequeue():移除队列的第一(即排在队列最前面的)项,并返回被移除的元素。
3、front():返回队列中第一个元素——最先被添加,也将是最先被移除的元素。队列不
做任何变动(不移除元素,只返回元素信息——与Stack类的peek方法非常类似)。
4、isEmpty():如果队列中不包含任何元素,返回true,否则返回false。
5、 size():返回队列包含的元素个数,与数组的length属性类似。

1、首先是创建一个队列

function Queue() {
//这里是属性和方法
}

2、向队列添加元素

首先要实现的是enqueue方法。这个方法负责向队列添加新元素。这里有一个非常重要的细节,新的项只能添加到队列末尾:
下面展示一些 内联代码片

this.enqueue = function(element){
 items.push(element); 
}; 

既然我们使用数组来存储队列的元素,就可以JavaScript的array类的push方法。

3、从队列中移除元素

接下来要实现dequeue方法。这个方法负责从队列移除项。由于队列遵循先进先出原则,最先添加的项也是最先被移除的。可以用第2章中介绍过的JavaScript的array类的shift方法。如果你不记得了,这里帮你回忆一下,shift方法会从数组中移除存储在索引0(第一个位置)
的元素:

this.dequeue = function(){ 
 return items.shift(); 
}; 

只有enqueue方法和dequeue方法可以添加和移除元素,这样就确保了Queue类遵循先进先出原则。

4、查看队列头元素

现在来为我们的类实现一些额外的辅助方法。如果想知道队列最前面的项是什么,可以实现一个front方法。这个方法会返回队列最前面的项(数组的索引为0)

this.front = function(){
 return items[0]; 
}; 

4、检查队列是否为空

下面是实现isEmpty方法。如果队列为空,它会返回true,否则返回false

this.isEmpty = function(){
 return items.length == 0; 
}; 

对于isEmpty方法,可以简单地验证内部数组的length是否为0。
我们也可以为Queue类实现类似于array类的length属性的方法。

this.size = function(){
 return items.length; 
}; 

5、打印队列元素

增加一个print方法进行打印,到这里队列就已经基本实现。

this.print = function(){
 console.log(items.toString()); 
}; 

5、实例化Queue类

首先实例化我们刚刚创建的Queue类,然后就可以验证它为空(输出为true,因为我们还没有向队列添加任何元素)

let queue = new Queue(); 
console.log(queue.isEmpty()); //输出true 

接下来可以添加元素:

queue.enqueue("John");
queue.enqueue("Jack"); 
queue.enqueue("Camila"); 

再执行一些其他的命令:

queue.print(); 
console.log(queue.size()); //输出3 
console.log(queue.isEmpty()); //输出false 
queue.dequeue(); 
queue.dequeue(); 
queue.print(); 

如果打印队列的内容,就会得到John、Jack和Camila这三个元素。因为我们向队列添加了三个元素,所以队列的大小为3(当然也就不为空了)。
下图展示了目前为止执行的所有入列操作,以及队列当前的状态:

然后,出列两个元素(执行两次dequeue方法)。下图展示了dequeue方法的执行过程:
在这里插入图片描述

最后,再次打印队列内容时,就只剩Camila一个元素了。前两个入列的元素出列了,最后入列的元素也将是最后出列的。也就是说,我们遵循了先进先出原则。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用于实现队列数据结构队列数据结构队列是一种列表,它具有先进先出(FIFO)的特性,即先到队列的元素会先被处理。队列的实现可以使用数组或链表来存储元素。在队列,新的元素会被插入到队列的末尾,而删除操作则在队列的头部进行。这样就保证了队列的元素按照插入的顺序被处理。队列的实现可以通过使用数组和两个指针(一个指向队列的头部,一个指向队列的尾部),或者使用链表来实现。队列数据结构的实现有助于解决许多实际问题,并且在计算机科学被广泛应用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [队列 数据结构_什么是队列数据结构?](https://blog.csdn.net/cunfen6312/article/details/107685027)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [基于JavaScript数据结构队列动画实现示例解析](https://download.csdn.net/download/weixin_38651812/14901203)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值