队列实现

使用数组来实现队列看起来顺理成章。JavaScript 中的数组具有其他编程语言中没有的优点, 数组的 push() 方法可以在数组末尾加入元素,shift() 方法则可删除数组的第一个元素。

push() 方法将它的参数插入数组中第一个开放的位置,该位置总在数组的末尾,即使是个 空数组也是如此。请看下面的例子:

names = [];

name.push("Cynthia"); names.push("Jennifer"); print(names); // 显示 Cynthia,Jennifer

然后使用 shift() 方法删除数组的第一个元素:

names.shift();

准备开始实现 Queue 类,先从构造函数开始:

function Queue() {

this.dataStore = [];

this.enqueue = enqueue;

this.dequeue = dequeue;

this.front = front;

this.back = back;

this.toString = toString;

this.empty = empty;

}

enqueue() 方法向队尾添加一个元素:

function enqueue(element) {

this.dataStore.push(element);

}

dequeue() 方法删除队首的元素:

function dequeue() {

return this.dataStore.shift();

}

可以使用如下方法读取队首和队尾的元素:

function front() {

return this.dataStore[0];

}

function back() {

return this.dataStore[this.dataStore.length-1];

}

还需要 toString() 方法显示队列内的所有元素:

function toString() {

var retStr = "";

for (var i = 0; i < this.dataStore.length; ++i) {

retStr += this.dataStore[i] + "\n";

return retStr;

}

最后,需要一个方法判断队列是否为空:

function empty() {

if (this.dataStore.length == 0) {

return true;

}

else {

return false;

}

}

代码归纳

function Queue() {

this.dataStore = [];

this.enqueue = enqueue;

this.dequeue = dequeue;

this.front = front;

this.back = back;

}

this.toString = toString;

this.empty = empty;

}

function enqueue(element) {

this.dataStore.push(element);

}

function dequeue() {

return this.dataStore.shift();

}

function front() {

return this.dataStore[0];

}

function back() {

return this.dataStore[this.dataStore.length - 1];

}

转自: https://segmentfault.com/a/1190000004921006

作者: Vagor

Javascript与数据结构系列(二)——队列的实现的更多相关文章

  1. <数据结构系列3>队列的实现与变形(循环队列)

    数据结构第三课了,今天我们再介绍一种很常见的线性表——队列 就像它的名字,队列这种数据结构就如同生活中的排队一样,队首出队,队尾进队.以下一段是百度百科中对队列的解释: 队列是一种特殊的线性表,特殊之 ...

  2. D&F学数据结构系列——二叉堆

    二叉堆(binary heap) 二叉堆数据结构是一种数组对象,它可以被视为一棵完全二叉树.同二叉查找树一样,堆也有两个性质,即结构性和堆序性.对于数组中任意位置i上的元素,其左儿子在位置2i上,右儿 ...

  3. Javascript与数据结构系列(一)——栈的实现

    栈的实现 实现一个栈,当务之急是决定存储数据的底层数据结构.这里采用的是数组. 我们的实现以定义 Stack 类的构造函数开始: function Stack() { this.dataStore = ...

  4. 自己实现数据结构系列二---LinkedList

    一.先上代码: 1.方式一: public class LinkedList<E> { //节点,用来存放数据:数据+下一个元素的引用 private class Node{ privat ...

  5. javascript类继承系列二(原型链)

    原型链是采用最主要的继承方式,原理:每一个类(构造器,js中的function)都有一个原型属性(prototype)指向一个原型对象,原型对象有一个构造器(constructor),它又指回到fun ...

  6. 【JavaScript数据结构系列】04-优先队列PriorityQueue

    [JavaScript数据结构系列]04-优先队列PriorityQueue 码路工人 CoderMonkey 转载请注明作者与出处 ## 1. 认识优先级队列 经典的案例场景: 登机时经济舱的普通队 ...

  7. JavaScript 版数据结构与算法(二)队列

    今天,我们要讲的是数据结构与算法中的队列. 队列简介 队列是什么?队列是一种先进先出(FIFO)的数据结构.队列有什么用呢?队列通常用来描述算法或生活中的一些先进先出的场景,比如: 在图的广度优先遍历 ...

  8. 【JavaScript数据结构系列】00-开篇

    [JavaScript数据结构系列]00-开篇 码路工人 CoderMonkey 转载请注明作者与出处 ## 0. 开篇[JavaScript数据结构与算法] 大的计划,写以下两部分: 1[JavaS ...

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

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

随机推荐

  1. python _/__/__**__区别

    "_"单下划线:"单下划线 " 开始的成员变量叫做保护变量,意思是只有类对象(即类实例)和子类对象自己能访问到这些变量,需通过类提供的接口进行访问:不能用'fr ...

  2. 解决 service iptables start 无法启动的问题

    解决方式: iptables -F  // 初始化iptables. service iptables save  // 保存 service iptables restart  // 重启

  3. 17_java之Integer|System|Arrays|Math|BigInteger|BigDecimal

    01基本数据类型对象包装类概述 *A:基本数据类型对象包装类概述 *a.基本类型包装类的产生 在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们需要把字符串数据, ...

  4. postman 中url有动态变换的值时,可以按下面方式变换。

    get 和post均适用.

  5. 关于C++成员函数指针的使用

    在做项目的时候,遇到了在类中根据不同的调用函数,在被调用函数的某处需要做不同的处理,本来就想着直接在类中设个标记变量判断下就好了,不过觉得这样代码可能看起来会有些凌乱,而且效率估计有些低,于是想起来使 ...

  6. Django-2的路由层(URLconf)

    URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码 ...

  7. c#中的序列化

    1.对象的序列化 NET支持对象序列化有以下几种方式:二进制序列化:对象序列化之后是二进制形式的,通过BinaryFormatter类来实现的,这个类位于System.Runtime.Serializ ...

  8. Django timezone问题

    今天用django做个blog碰到了问题,提交内容后浏览提示Database returned an invalid value in QuerySet.datetimes(). Are time z ...

  9. C# event 事件学习

    C# event 事件学习 运行环境:Window7 64bit,.NetFramework4.61,C# 6.0: 编者:乌龙哈里 2017-02-26 章节: 简单事件编写 模拟 WPF 控件传递 ...

  10. avalon 的HTML规范

    由于avalon以绑定属性实现对DOM的选择与操作,页面的美观与调试就变得至关重要.参照boostrap的HTML规范,制定如下 属性排列的规范 class (class, id, name与浏览器的 ...