队列的实现

// 队列类
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. 【Python3 爬虫】05_安装Scrapy

    Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛.框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容 ...

  2. Redis 3.2.8 集群模式+Sentinel多Master部署

    环境准备CentOS 7.3redis1 172.18.1.101:7001 masterredis2 172.18.1.102:7002 masterredis3 172.18.1.103:7003 ...

  3. Idea maven多模块项目有些加载不出来

    进入View>Tool Windows>Maven projects区域,添加新的项目识别. 选择要加载项目的pom.xml文件,ok 完成.

  4. python 在Windows中描述路径时出现的问题

    问题的根本:windows读取文件可以用\,但在字符串里面\被作为转义字符使用,   python在描述路径时有两种方式: 'd:\\a.txt',转义的方式 r'd:\a.txt',声明字符串不需要 ...

  5. Drawable资源的初步使用

    刚開始接触到Android的时候,看到类似以下的一个Button: 当时感觉这种button有点像Material Design风格.真的以为是裁剪好的图片,好奇心驱使我上网查找实现的方法,原来不是裁 ...

  6. python装饰器的理解

    学习python,发现装饰器是一个比较难理解的地方. 下面用代码来说明. 装饰器的作用是为了切面编程(AOP).这种编程在java上有很多实现方式.下面直接说明吧: 1.作为装饰器的函数至少有两个de ...

  7. 李洪强iOS开发之OC[007] - 李洪强iOS开发之类的声明和实现

    类的声明和实现 类是一类具有相同特征和共同行为的集合 小轿车   大卡车   挖掘机    (车) 车类 类名: Car 属性: 颜色  速度  轮字数 共同行为: 跑  停  载人 对象: 是类的具 ...

  8. 李洪强漫谈iOS开发[C语言-002]-开发概述程序的本质与简单执行过程

    李洪强iOS开发之应用程序的本质与简单执行过程 什么叫程序? 就是一段执行指令 程序的两个状态: 保存状态(保存到硬盘上)   运行状态(由CPU执行) 代码可以执行吗? CPU(中央处理器-> ...

  9. 敲敲SQL语句

    基本命令 查看数据库:show databases; 选择数据库:use mysql_crash; 连接数据库:需要:主机名,端口,合法用户名,用户口令 mysql -u ben -p -h loca ...

  10. 基于JS实现回到页面顶部的五种写法(从实现到增强)

    这篇文章主要介绍了基于JS实现回到页面顶部的五种写法(从实现到增强)的相关资料,本文介绍的非常详细,实用性也非常高,非常具有参考借鉴价值,需要的朋友可以参考下   写法 [1]锚点 使用锚点链接是一种 ...