队列的实现

// 队列类
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. js 根据身份证获取出生日期及性别

      js根据身份证获取出生日期及性别 CreateTime--2017年6月2日11:45:16Author:Marydon 第一步:身份证号格式校验 /** * 身份证号格式校验 */ functi ...

  2. bootstrap资料链接

    别人的博客,写的还不错 http://www.cnblogs.com/hnnydxgjj/category/879277.html

  3. Maven 命令行创建项目时 Could not find goal ‘create’ in plugin org.apache.maven.plugins:...

    使用maven3.3.9 版本,进行命令行创建项目时输入以下命令创建失败 mvn archetype:create -DgroupId=com.zang.maven  -DartifactId=sys ...

  4. unity, 烘焙lightmap

    1,建一个名为_scene的场景,放一个球体. 2,将球体的Static属性勾选. 3,将默认光源Directional light的Baking属性改为Baked. 4,打开Window->L ...

  5. java - day07 - PrimeNum

    判断质数 package day06; import java.util.Scanner; //验证质数 public class primeNum { public static void main ...

  6. 从零开始学习SSH框架笔记之四 几个关键配置文件备忘(模板)

    不多说,直接上代码.关于注释我尽量写详细点. 1.web.xml <?xml version="1.0" encoding="UTF-8"?> &l ...

  7. backtrace、backtrace_symbols

    参考: http://www.th7.cn/Program/cp/201308/145700.shtml http://linux.die.net/man/3/backtrace http://man ...

  8. C++获取二维数组的元素个数

    C/C++获取二维数组的大小/长度/元素个数 ][]; ]) /

  9. 《排序算法》——堆排序(大顶堆,小顶堆,Java)

    十大算法之堆排序: 堆的定义例如以下: n个元素的序列{k0,k1,...,ki,-,k(n-1)}当且仅当满足下关系时,称之为堆. " ki<=k2i,ki<=k2i+1;或k ...

  10. Linux下批量删除空文件

    Linux下批量删除空文件(大小等于0的文件)的方法 find . -name "*" -type f -size 0c | xargs -n 1 rm -f 用这个还能够删除指定 ...