JavaScript数据结构与算法-队列练习
队列的实现
// 队列类
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数据结构与算法---队列
javascript数据结构与算法---队列 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素 ...
- JavaScript数据结构和算法----队列
前言 队列和栈很像,只是用了不同的原则.队列是遵循先进先出(FIFO)原则的一组有序的的项,队列在尾部添加新元素,从顶部移除元素.最新添加的元素必须必须排队在队列的,末尾.可以想象食堂排队买饭的样子. ...
- Javascript数据结构与算法--队列(顺序队列、优先队列、循环队列)的实现与用法
前言 队列和栈非常类似,前面已经讲过了栈的实现与用法,现在我们来说说队列. 队列介绍 队列遵循FIFO(First In First Out,先进先出)原则的一组有序的项. 队列是一种特殊的线性表,特 ...
- 为什么我要放弃javaScript数据结构与算法(第四章)—— 队列
有两种结构类似于数组,但在添加和删除元素时更加可控,它们就是栈和队列. 第四章 队列 队列数据结构 队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序 ...
- 重读《学习JavaScript数据结构与算法-第三版》- 第5章 队列
定场诗 马瘦毛长蹄子肥,儿子偷爹不算贼,瞎大爷娶个瞎大奶奶,老两口过了多半辈,谁也没看见谁! 前言 本章为重读<学习JavaScript数据结构与算法-第三版>的系列文章,主要讲述队列数据 ...
- JavaScript 数据结构与算法之美 - 线性表(数组、栈、队列、链表)
前言 基础知识就像是一座大楼的地基,它决定了我们的技术高度. 我们应该多掌握一些可移值的技术或者再过十几年应该都不会过时的技术,数据结构与算法就是其中之一. 栈.队列.链表.堆 是数据结构与算法中的基 ...
- JavaScript数据结构——栈和队列
栈:后进先出(LIFO)的有序集合 队列:先进先出(FIFO)的有序集合 --------------------------------------------------------------- ...
- 前端开发周报: CSS 布局方式方式与JavaScript数据结构和算法
前端开发周报:CSS 布局方式与JavaScript动画库 1.常见 CSS 布局方式详见: 一些常见的 CSS 布局方式梳理,涉及 Flex 布局.Grid 布局.圣杯布局.双飞翼布局等.http: ...
- 为什么我要放弃javaScript数据结构与算法(第九章)—— 图
本章中,将学习另外一种非线性数据结构--图.这是学习的最后一种数据结构,后面将学习排序和搜索算法. 第九章 图 图的相关术语 图是网络结构的抽象模型.图是一组由边连接的节点(或顶点).学习图是重要的, ...
随机推荐
- 豆瓣电台笔记3:cell添加从中间向两侧放大的动画
步骤: 1.设置动画属性的初始值 cell.layer.transform = CATransform3DMakeScale(0.1,0.1,1) 2.在指定时间内执行动画 UIView.animat ...
- 转:C#中Monitor对象与Lock关键字的区别分析
Monitor对象1.Monitor.Enter(object)方法是获取 锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中为了避免获取 ...
- MII_GMII_RGMII_RMII_SMII_SSMII_TBI_RTBI比较
MII_GMII_RGMII_RMII_SMII_SSMII_TBI_RTBI比较 https://wenku.baidu.com/view/2e136caa8bd63186bdebbc40.html
- python模块学习之__future__
每个程序在更新版本之后,都会相较于上一个版本有所改动.这些改动会给程序的使用者造成不小的困扰! 比如python2.xx和3.xx的改动,足够让新手们头大了! 在3中, u'xxx'和'xxx'都是字 ...
- css之常用属性
背景属性: background-attachment 设置背景图像是否固定或者随着页面的其余部分滚动 值: scroll 默认值.背景图像会随着页面其余部分的滚动而移动. fixed 当页面的其余部 ...
- windows下使用python2.7.6 安装django
1) 安装python2.7.6 2) 由于 python2.7.6 中没有安装setuptools,需要先从官网下载setuptools,下载zip包然后解压,运行 python setup.py ...
- BootstrapValidator 解决多属性被同时校验问题《转》
问题描述:在使用bootstrapValidator插件校验表单属性,当表单属性过多需要每行并列多个属性 ,会出现校验第一个属性,发现整行被校验的效果 ,这不是我们工作想要的效果.如图: 问题分析:因 ...
- Java8 stream学习
Java8初体验(二)Stream语法详解 Java 8 flatMap示例 第一个Stream Demo IDEA里面写Stream有个坑 虽然java文件中没错,但是但编译的时候还是报错了, In ...
- HUAWEI HiAI常见FAQ小贴士
8月7日,HUAWEI HiAI系统架构师在CSDN平台为广大开发者进行了以“APP进阶实战:最快10分钟接入HUAWEI HiAI”主题的直播,迎来600多名开发者在线上观看. 直播中,讲师详细 ...
- es6中顶层对象属性≠全局属性
先思考一下下面代码的输出结果是什么 const a = { x:1, fn:()=>this.x+=1 } const x = 1 a.fn() console.log(a.x,x) 正确答案为 ...