javascript数据结构之队列
首先什么是队列?
排队买东西就是生活中队列的实际例子,在队伍中大家必须按照顺序来,不能插队,新来的人只能排在队伍的最后面。新加入的人相当于队列的后端加入的元素,队伍最前面买完东西的人离开队伍相当于是队列的前端元素的删除。其他的一些操作就不一一列举了,大家可以自行想象类比。
其实队列是和栈很类似,区别在于栈是先入后出(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数据结构之队列的更多相关文章
- JavaScript数据结构,队列和栈
在JavaScript中为数组封装了大量的方法,比如:concat,pop,push,unshift,shift,forEach等,下面我将使用JavaScript提供的这些方法,实现队列和栈的操作. ...
- JavaScript数据结构-5.队列
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- JavaScript 数据结构与算法之美 - 线性表(数组、栈、队列、链表)
前言 基础知识就像是一座大楼的地基,它决定了我们的技术高度. 我们应该多掌握一些可移值的技术或者再过十几年应该都不会过时的技术,数据结构与算法就是其中之一. 栈.队列.链表.堆 是数据结构与算法中的基 ...
- 学习javascript数据结构(一)——栈和队列
前言 只要你不计较得失,人生还有什么不能想法子克服的. 原文地址:学习javascript数据结构(一)--栈和队列 博主博客地址:Damonare的个人博客 几乎所有的编程语言都原生支持数组类型,因 ...
- javascript数据结构与算法---队列
javascript数据结构与算法---队列 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素 ...
- JavaScript数据结构——栈和队列
栈:后进先出(LIFO)的有序集合 队列:先进先出(FIFO)的有序集合 --------------------------------------------------------------- ...
- JavaScript数据结构——队列的实现
前面楼主简单介绍了JavaScript数据结构栈的实现,http://www.cnblogs.com/qq503665965/p/6537894.html,本次将介绍队列的实现. 队列是一种特殊的线性 ...
- 为什么我要放弃javaScript数据结构与算法(第四章)—— 队列
有两种结构类似于数组,但在添加和删除元素时更加可控,它们就是栈和队列. 第四章 队列 队列数据结构 队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序 ...
- JavaScript数据结构与算法-队列练习
队列的实现 // 队列类 function Deque () { this.dataStore = []; this.enqueueFront = enqueueFront; this.enqueue ...
随机推荐
- T100——程序从标准签出客制后注意r.c和r.l
标准签出客制后,建议到对应4gl目录,客制目录 r.c afap280_01 r.l afap280_01 ALL 常用Shell操作命令: r.c:编译程序,需在4gl路径之下执行,产生的42m会自 ...
- configure,make和make install关系
linux编译安装中configure.make和make install各自的作用 ./configure是用来检测你的安装平台的目标特征的.configure根据给定的参数和系统环境会生成Make ...
- 【IntelliJ IDEA】添加一个新的tomcat,tomcat启动无法访问欢迎页面,空白页,404
===================================第一部分,添加一个tomcat================================================== ...
- Spring Boot Redis 集成 Error creating bean with name 'enableRedisKeyspaceNotificationsInitializer'
一.原因:redis集群环境没有开启Keyspace notifications 二.解决办法 @Configuration public class HttpSessionConfig { /** ...
- CPU vector operations
CPU vector operations 原文:https://blog.csdn.net/wangeen/article/details/8602028 vector operations 是现代 ...
- B树,B+树的原理及区别
如图所示,区别有以下两点: 1. B+树中只有叶子节点会带有指向记录的指针(ROWID),而B树则所有节点都带有,在内部节点出现的索引项不会再出现在叶子节点中. 2. B+树中所有叶子节点都是通过指针 ...
- 封装AJAX库(参考JQ)
//jQ方法 $.ajax([URL],[OPTIONS]) $.ajax({ url:'', data:null, datatype:'json', method:'GET', async:true ...
- script标签所应放的位置
一般放置的位置:<head>标签内,<body>标签内,<body>标签后(建议放在body标签后,利于页面的优化,优化页面结构加载的速度) 1.<head& ...
- BPM软件_K2再度入选Gartner iBPMS MQ挑战者象限_全球领先的工作流引擎
在Gartner 于1月最新发布的2018 iBPMS MQ报告中,K2再度入选“挑战者”象限,相较去年,K2在“前瞻性”方面有了显著提升. Gartner对该标准的定义为:供应商对市场具有清晰认识, ...
- Oracle创建索引;查询索引
1.创建索引 create index 索引名 on 表名(列名); 2.删除索引 drop index 索引名; 3.创建组合索引 create index 索引名 on 表名(列名1,,列名2); ...