首先什么是队列?

  排队买东西就是生活中队列的实际例子,在队伍中大家必须按照顺序来,不能插队,新来的人只能排在队伍的最后面。新加入的人相当于队列的后端加入的元素,队伍最前面买完东西的人离开队伍相当于是队列的前端元素的删除。其他的一些操作就不一一列举了,大家可以自行想象类比。

  其实队列是和栈很类似,区别在于栈是先入后出(FILO)的数据结构,只能操作栈顶的元素,而队列是先入先出(FIFO)的数据结构,可以同时操作队列的前端和后端。队列只能在前端删除元素,在后端插入元素,相当于是一个受限的线性表,只能在前后端来对元素进行操作,不能够像线性表一样对中间的任意元素进行插入和删除操作,所以队列实际上可以看作是一种特殊的线性表。

  既然要用javascript来实现队队列的模拟,那么先列举出需要用到的js数据结构以及对应的方法。

  还是用js中的数组来存储队列中的元素,js中队数组的主要操作有如下方法: 

  • pop() 删除数组末端的元素,返回这个元素

  • push(a) 将元素a压入数组末端,返回数组的长度

  • shift() 删除数组开端的元素,返回这个元素

  • unshift(a) 在数组的开端添加新的元素a,返回数组的长度

  • slice(a,b) 返回原数组位置从[a,b)的值构成的所有项

  • splice(a,b,args) 从数组的a位置开始删除b个元素,然后再a位置插入系数args

  • concat(args) 在数组的末端加上参数args

 我们将实现的队列的方法有如下几种:

  • enqueue() 入队

  • dequeue () 出队

  • front () 返回队头

  • isEmpty() 队列是否为空

  • clear() 清空队列

  • size() 返回这个队列的长度

  • print() 打印队列所有元素

下面是js实现:

/*
* 数据结构:队列
*/ function Queue(){ var array = []; this.enqueue = function(data){ //入队操作
array.push(data);
} this.dequeue = function(){ //出队
return array.shift();
} this.front = function(){ //返回对头
return array[0];
} this.isEmpty = function(){ // 判断队列是否为空
if(array.length == 0){
return true;
}
return false;
} this.clear = function(){ //清除队列
array = [];
} this.size = function(){ //返回队列的长度
return array.length;
} this.print = function(){ //打印队列的所有元素
console.log(array.toString());
} } //下面实例化了一个队列对象queue,进行验证。 var queue = new Queue();
queue.enqueue("xianghuang"); //先入队三个元素
queue.enqueue("xiaobai");
queue.enqueue("xiaohua");
queue.print();//查看此时的队列中的元素
queue.dequeue(); // 出队一个元素
queue.print(); //看看此时的队列中的元素
console.log(queue.front()); //查看此时的队头
console.log(queue.isEmpty());//看看此时是否为空
console.log(queue.size()); //查看队列的长度
queue.clear(); //清空队列元素

下面是在chrome的console内的验证,没有错误。

javascript数据结构之队列的更多相关文章

  1. JavaScript数据结构,队列和栈

    在JavaScript中为数组封装了大量的方法,比如:concat,pop,push,unshift,shift,forEach等,下面我将使用JavaScript提供的这些方法,实现队列和栈的操作. ...

  2. JavaScript数据结构-5.队列

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. JavaScript 数据结构与算法之美 - 线性表(数组、栈、队列、链表)

    前言 基础知识就像是一座大楼的地基,它决定了我们的技术高度. 我们应该多掌握一些可移值的技术或者再过十几年应该都不会过时的技术,数据结构与算法就是其中之一. 栈.队列.链表.堆 是数据结构与算法中的基 ...

  4. 学习javascript数据结构(一)——栈和队列

    前言 只要你不计较得失,人生还有什么不能想法子克服的. 原文地址:学习javascript数据结构(一)--栈和队列 博主博客地址:Damonare的个人博客 几乎所有的编程语言都原生支持数组类型,因 ...

  5. javascript数据结构与算法---队列

    javascript数据结构与算法---队列 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素 ...

  6. JavaScript数据结构——栈和队列

    栈:后进先出(LIFO)的有序集合 队列:先进先出(FIFO)的有序集合 --------------------------------------------------------------- ...

  7. JavaScript数据结构——队列的实现

    前面楼主简单介绍了JavaScript数据结构栈的实现,http://www.cnblogs.com/qq503665965/p/6537894.html,本次将介绍队列的实现. 队列是一种特殊的线性 ...

  8. 为什么我要放弃javaScript数据结构与算法(第四章)—— 队列

    有两种结构类似于数组,但在添加和删除元素时更加可控,它们就是栈和队列. 第四章 队列 队列数据结构 队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序 ...

  9. JavaScript数据结构与算法-队列练习

    队列的实现 // 队列类 function Deque () { this.dataStore = []; this.enqueueFront = enqueueFront; this.enqueue ...

随机推荐

  1. 【转】Entity Framework 6 Code First 实践系列(1):实体类配置-根据依赖配置关系和关联

    本文转自:http://www.cnblogs.com/easygame/p/3622893.html EF实体类的配置可以使用数据注释或Fluent API两种方式配置,Fluent API配置的关 ...

  2. k8s-日志收集架构

    日志收集 Kubernetes 集群中监控系统的搭建,除了对集群的监控报警之外,还有一项运维工作是非常重要的,那就是日志的收集. 介绍 应用程序和系统日志可以帮助我们了解集群内部的运行情况,日志对于我 ...

  3. DaemonSet和StatefulSet

    DaemonSet 的使用 通过该控制器的名称我们可以看出它的用法:Daemon,就是用来部署守护进程的,DaemonSet用于在每个Kubernetes节点中将守护进程的副本作为后台进程运行,说白了 ...

  4. git忽略而不提交文件的3种情形

    1.从未提交过的文件可以用.gitignore 也就是添加之后从来没有提交(commit)过的文件,可以使用.gitignore忽略该文件 该文件只能作用于未跟踪的文件(Untracked Files ...

  5. MongoDB的复合唯一索引

    一 创建 JavaScript Shell db.room.ensureIndex({'floor':1,'num':1}) Spring Data @Data // lombok @Document ...

  6. ajax调用c# webservice 如何传递实体参数

    后端: 前端: 运行结果: 感觉还是比较简单,只是好久没有写webservice 了,上网找了一下写法

  7. 手写map, filter函数

    function map(arr, fn) { let newArr = []; for (let i = 0; i < arr.length; i++) { newArr[i] = fn(ar ...

  8. luogu P3750 [六省联考2017]分手是祝愿

    luogu loj 可以发现在最优策略中,每种操作最多只会做一次,并且操作的先后顺序并不会影响答案,所以考虑从后往前扫,碰到一个\(1\)就对这个位置\(i\)进行操作,这样的操作一定是最优策略.记最 ...

  9. JavaScript随机验证码

    利用canvas制作一个随机验证码: 1.clearRect:context.clearRect(x,y,width,height);清空给定矩形内的指定像素 2.fillStyle:设置画笔的颜色 ...

  10. ActiveMQ入门系列三:发布/订阅模式

    在上一篇<ActiveMQ入门系列二:入门代码实例(点对点模式)>中提到了ActiveMQ中的两种模式:点对点模式(PTP)和发布/订阅模式(Pub & Sub),详细介绍了点对点 ...