资讯专栏INFORMATION COLUMN

数据结构——队列

svtter / 1413人阅读

摘要:最近一直在学习图数据结构,但是他用实现需要用到字典,遍历的时候又需要用到栈,所以接下来我先把原来学习数据结构所记的笔记整理出来队列基本知识队列和我们日常生活中的排队一样,遵循的是原则,及的原则操作队列的方法有向尾部插入元素方法完成进队删除头

最近一直在学习图数据结构,但是他用js实现需要用到字典,遍历的时候又需要用到栈,所以接下来我先把原来学习数据结构所记的笔记整理出来

队列基本知识

队列:和我们日常生活中的排队一样,遵循的是FIFO原则,及first in first out的原则
操作队列的方法有:

向尾部插入元素 enqueue()方法完成进队

删除头部的元素 dequeue()方法完成出队

返回队列中的第一个元素 front()方法 及最先进入队列和最先出队列的元素

还有一些用于查询的方法:

判断一个队列是否为空 isEmpty()方法 如果为空就返回true 如果不为空就返回false

返回数组的容量 size()方法

将一个数组打印出来 print()方法

接下来,我们将实现队列这个类,首先,定义一个队列的类,类中有一个私有数组,存放着我们需要的元素:

let Queue = function(){
       let items = [];
  }

接下来,我们来定义队列类的公共方法

 //首先创建一个队列的类
   let Queue = function(){
       let items = [];
       //在数组末尾添加元素
       this.enqueue = function(e){
         items.push(e);
       }
       //删除最开头,也是最先添加的元素
       this.dequeue = function(e){
           return items.shift();
       }
       //读取队列中的最先被添加 最先被删除的元素
       this.front = function(){
           return items[0];
       }
       //判断数组是否为空,如果为空就返回true 反之 就返回false
       this.isEmpty = function(){
           return items.length == 0;
       }
       //返回数组的容量
       this.size = function(){
           return items.length;
       }
       //打印数组
       this.print = function(){
          console.log(items.toString());
       }
   }
优先队列

就像现实生活中的订购特等舱的顾客先上机,订购经济舱的顾客后上机一样,优先队列就是对权重较大的元素(用1表示权重最大)优先进行操作,我们有两种实现方法:

将不同的元素设置优先级,根据优先及将元素添加到数组的正确位置,修改的是enqueue方法

用入列操作添加元素以后,按照元素的优先级执行出列,修改的是dequeue方法

我们将用第一种方法进行实现(如果用第二种的话用字典会更加合适一些),其他方法都不变,我们只对enqueue方法进行修改

 //首先创建一个队列的类
   var Queue = function(){
       var items = [];
       function QueueElements(element,priority){
           this.element = element;
           this.priority = priority;
           return this;
       }
       //在数组末尾添加元素
       this.equeue = function(element,priority){
         var item = new QueueElements(element,priority);
         if(this.isEmpty()){
             items.push(item);
         }else{
             var added = false;
             for(let i=0;i

函数解释:这里的equeue方法 和 以往的 equeue方法区别就是,添加的元素是一个带有优先级属性的元素(QueueElements类new出来的一个对象),在添加之前先判断数组的是否为空,如果为空就直接插入,如果不为空就对优先级进行比较,只要找到比他大的就将该元素插入,将added设置为true,如果没有找到比他还大的,那么added依然是false,这时就将元素push到数组的最后

击鼓传花模拟

基本思想就是:如果没有轮到这个元素,就把该元素从头部删除添加到队列的末尾,如果传到了,就将该元素删除,继续循环剩下的元素

function hotPotato(namelist,num){
       //创建一个新的队列
       let queue = new Queue();
       //将所有元素加入姓名的列表
       for(let i=0;i 1){
          let nameitem = "";
          for(let i=0;i

函数解释:游戏不停止的条件是队列中元素的长度大于1,等于1时则择出胜利者,循环,当num不等于7时,就把末尾的移到队列前面,循环完毕,num=7,删除这个时候处在尾部的元素,继续执行上述操作,直至队列中只剩一个元素

以上是队列的全部内容,还望各位同仁大神指点一二,我虚心接受

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81592.html

相关文章

  • JavaScript数据结构队列

    摘要:在队列的这种数据结构里面,新增的元素都在尾部,要移除的元素都在顶部。代码实现下面用代码来实现队列这个数据结构,同样都采用的语法,我们先定义一个类来表示队列,然后在这个类的基础上定义一下方法来模拟队列的行为。 队列和栈非常的类似,但是他们采用了不同的原则,栈采用的是后进先出,队列正好相反,采用的是先进先出的原则。队列的定义如下 队列是遵循FIFO(先进先出)原则的有序集合,新添加的元素保...

    saucxs 评论0 收藏0
  • Java数据结构与算法[原创]——队列

    摘要:前言数据结构与算法专题会不定时更新,欢迎各位读者监督。队列和栈类似,也是一个遵循特殊规则约束的数据结构。将没有元素的队列称之为空队,往队列中插入元素的过程称之为入队,从队列中移除元素的过程称之为出队。 声明:码字不易,转载请注明出处,欢迎文章下方讨论交流。 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督。本文介绍数据结构中的队列(queue)的概念、存储结构、队列的特点...

    韩冰 评论0 收藏0
  • [ JavaScript ] 数据结构与算法 —— 队列

    摘要:而且目前大部分编程语言的高级应用都会用到数据结构与算法以及设计模式。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。 前言 JavaScript是当下最流行的编程语言之一,它可以做很多事情: 数据可视化(D3.js,Three.js,Chart.js); 移动端应用(React Native,Weex,AppCan,Flutter,Hybrid App,小程...

    Yi_Zhi_Yu 评论0 收藏0
  • java 队列

    摘要:是基于链接节点的线程安全的队列。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。队列内部仅允许容纳一个元素。该队列的头部是延迟期满后保存时间最长的元素。 队列简述 Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口。...

    goji 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<