队列的实现

// 队列类
function Deque () {
this.dataStore = [];
this.enqueueFront = enqueueFront;
this.enqueueBack = enqueueBack;
this.dequeueFront = dequeueFront;
this.dequeueBack = dequeueBack;
this.front = front;
this.back = back;
this.toString = toString;
this.empty = empty;
}
// 入队 - 队首
function enqueueFront (element) {
this.dataStore.unshift(element);
}
// 出队 - 队首
function dequeueFront () {
return this.dataStore.shift();
}
// 入队 - 队尾
function enqueueBack (element) {
this.dataStore.push(element);
}
// 出队 - 队尾
function dequeueBack (element) {
return this.dataStore.pop(element);
}
// 读取队首的元素
function front () {
return this.dataStore[0];
}
// 读取队尾的元素
function back () {
return this.dataStore[this.dataStore.length - 1];
}
// 显示队列内所有元素
function toString () {
let retStr = ``;
for (let 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;
}
}

练习

一. 修改Queue类,形成一个Deque类。这是一个和队列类似的数据结构,允许从队列两端添加和删除元素,因此也叫双向队列。写一段测试程序测试该类。

// 双向队列类
function Deque () {
this.dataStore = [];
this.enqueueFront = enqueueFront;
this.enqueueBack = enqueueBack;
this.dequeueFront = dequeueFront;
this.dequeueBack = dequeueBack;
this.front = front;
this.back = back;
this.toString = toString;
this.empty = empty;
}
// 入队 - 队首
function enqueueFront (element) {
this.dataStore.unshift(element);
}
// 出队 - 队首
function dequeueFront () {
return this.dataStore.shift();
}
// 入队 - 队尾
function enqueueBack (element) {
this.dataStore.push(element);
}
// 出队 - 队尾
function dequeueBack (element) {
return this.dataStore.pop(element);
}
// 读取队首的元素
function front () {
return this.dataStore[0];
}
// 读取队尾的元素
function back () {
return this.dataStore[this.dataStore.length - 1];
}
// 显示队列内所有元素
function toString () {
let retStr = ``;
for (let 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;
}
}
// 测试
let d = new Deque();
d.enqueueFront(`a`);
d.enqueueFront(`b`);
d.enqueueFront(`c`);
d.enqueueFront(`d`);
d.enqueueFront(`e`);
console.log(d.dataStore); // ["e", "d", "c", "b", "a"]
d.enqueueBack(`a`);
d.enqueueBack(`b`);
d.enqueueBack(`c`);
d.enqueueBack(`d`);
d.enqueueBack(`e`);
console.log(d.dataStore); // ["e", "d", "c", "b", "a", "a", "b", "c", "d", "e"]
d.dequeueFront();
d.dequeueFront();
console.log(d.dataStore); // ["c", "b", "a", "a", "b", "c", "d", "e"]
d.dequeueBack();
d.dequeueBack();
d.dequeueBack();
console.log(d.dataStore); // ["c", "b", "a", "a", "b"]

二. 使用前面完成的Deque类来判断一个给定单词是否为回文。

function isPalindrom (word) {
let d = new Deque();
let max = word.length;
for (let i = 0; i < max; ++i) {
d.enqueueBack(word[i]);
}
while (d.dataStore.length > 1) {
if (d.dequeueFront() !== d.dequeueBack()) {
return false;
}
}
return true;
}
// 示例
console.log(isPalindrom(`racecar`)); // true
console.log(isPalindrom(`ada`)); // true
console.log(isPalindrom(`mazey`)); // false

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

JavaScript数据结构与算法-队列练习的更多相关文章

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

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

  2. JavaScript数据结构和算法----队列

    前言 队列和栈很像,只是用了不同的原则.队列是遵循先进先出(FIFO)原则的一组有序的的项,队列在尾部添加新元素,从顶部移除元素.最新添加的元素必须必须排队在队列的,末尾.可以想象食堂排队买饭的样子. ...

  3. Javascript数据结构与算法--队列(顺序队列、优先队列、循环队列)的实现与用法

    前言 队列和栈非常类似,前面已经讲过了栈的实现与用法,现在我们来说说队列. 队列介绍 队列遵循FIFO(First In First Out,先进先出)原则的一组有序的项. 队列是一种特殊的线性表,特 ...

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

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

  5. 重读《学习JavaScript数据结构与算法-第三版》- 第5章 队列

    定场诗 马瘦毛长蹄子肥,儿子偷爹不算贼,瞎大爷娶个瞎大奶奶,老两口过了多半辈,谁也没看见谁! 前言 本章为重读<学习JavaScript数据结构与算法-第三版>的系列文章,主要讲述队列数据 ...

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

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

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

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

  8. 前端开发周报: CSS 布局方式方式与JavaScript数据结构和算法

    前端开发周报:CSS 布局方式与JavaScript动画库 1.常见 CSS 布局方式详见: 一些常见的 CSS 布局方式梳理,涉及 Flex 布局.Grid 布局.圣杯布局.双飞翼布局等.http: ...

  9. 为什么我要放弃javaScript数据结构与算法(第九章)—— 图

    本章中,将学习另外一种非线性数据结构--图.这是学习的最后一种数据结构,后面将学习排序和搜索算法. 第九章 图 图的相关术语 图是网络结构的抽象模型.图是一组由边连接的节点(或顶点).学习图是重要的, ...

随机推荐

  1. [Liferay] Liferay 实现单点登录 - OpenLDAP

    Liferay 的单点登录绝对是个难啃的骨头,更何况网上能搜到的基本都是些滥竽充数的文章,很不负责任. 于是在自己搭通单点登录一条线之后,决定整理下思路并写出来,希望各位能别重蹈覆辙. 本文不介绍概念 ...

  2. Visual studio C++ MFC之树形控件Tree Control

    背景 本篇旨在MSDN帮助文档下总结树形控件Tree Control的使用,并列出碰到的具体问题. 正文 树形控件Tree Control的类则是CTreeCtrl,具体成员对象详见链接,以下则描述一 ...

  3. JAVA IO:Scanner类

    使用Scanner类接收输入数据. JAVA提供了专门的输入数据类,此类可以完成BufferedReader类的功能,也可以方便的对输入数据进行验证,此类存放于JAVA.UTILL包中. 常用方法如下 ...

  4. js中的 return false;

    总的来说return false 的作用就是阻止事件的默认行为 1. function check() { if(form.title.value=="") { alert(&qu ...

  5. Spring Sleuth和Zipkin跟踪微服务

    原文地址:http://www.cnblogs.com/skyblog/p/6213683.html 随着微服务数量不断增长,需要跟踪一个请求从一个微服务到下一个微服务的传播过程, Spring Cl ...

  6. c#中从string数组转换到int数组及比较两个字符串相等

    string[] input = { "1", "2", "3", "4", "5", " ...

  7. script

    实例 链接一个外部脚本文件: <script type="text/javascript" src="myscripts.js"></scri ...

  8. java 中 HashMap 遍历与删除

    HashMap的遍历 方法一.这是最常见的并且在大多数情况下也是最可取的遍历方式 /** * 在键值都需要时使用 */ Map<Integer, Integer> map = new Ha ...

  9. 520. Detect Capital【easy】

    520. Detect Capital[easy] Given a word, you need to judge whether the usage of capitals in it is rig ...

  10. 2016ATF阿里巴巴技术论坛

    转自:http://blog.csdn.net/mini_monster/article/details/51175879 “爱迪生的贡献不在于让灯泡亮的更久一些,爱迪生最大的贡献是在全世界第一个想到 ...