JavaScript 实现双向队列并用此来测试一个单词是否为回文
题目出自《数据结构与算法 JavaScript 描述》一书第五章,习题 5.2
代码如下:
/*************** Deque 类的实现 *************/
function Deque() {
this.dataStore = [];
this.enqueue = enqueue;
this.dequeue = dequeue;
this.unshift = unshift;
this.pop = pop;
this.front = front;
this.back = back;
this.toString = toString;
this.empty = empty;
}
// 向队尾添加一个元素
function enqueue(element) {
this.dataStore.push(element);
}
// 从队尾删除一个元素
function pop() {
return this.dataStore.pop();
}
// 增加元素到队首
function unshift(element) {
this.dataStore.unshift(element);
}
// 删除队首元素
function dequeue() {
return this.dataStore.shift();
}
// 读队首和队尾的元素
function front() {
return this.dataStore[0];
}
function back() {
return this.dataStore[this.dataStore.length-1];
}
// 显示队列内所有元素
function toString() {
var 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;
}
}
/******************** 用 Deque 类判断一个给定单词是否为回文*****************/
function isHuiWen(str) {
var d = new Deque();
for (let i = 0; i < str.length; ++i) {
d.enqueue(str[i]);
}
var front = '', end = '';
// 如果单词长度是奇数,则中间那个不需要判断
while (!d.empty() && d.dataStore.length != 1) {
front = d.dequeue();
end = d.pop();
if (front != end) {
return false;
}
}
return true;
}
var testStr = "levvel";
console.log(isHuiWen(testStr));
JavaScript 实现双向队列并用此来测试一个单词是否为回文的更多相关文章
- javascript中的双向队列
1.概念 我们知道队列是一种先进先出的结构,只能在队伍的开头添加元素,队伍的结尾删除元素.双向队列的概念就是同时允许在队伍的开头和结尾添加和删除元素.在javascript中有一个处理数组的方法Arr ...
- C++ Deque(双向队列)
C++ Deque(双向队列)是一种优化了的.对序列两端元素进行添加和删除操作的基本序列容器.它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的 ...
- python-Day3-set 集合-counter计数器-默认字典(defaultdict) -可命名元组(namedtuple)-有序字典(orderedDict)-双向队列(deque)--Queue单项队列--深浅拷贝---函数参数
上节内容回顾:C语言为什么比起他语言块,因为C 会把代码变异成机器码Pyhton 的 .pyc文件是什么python 把.py文件编译成的.pyc文件是Python的字节码, 字符串本质是 字符数组, ...
- PHP双向队列,双端队列代码
<?php /** * User: jifei * Date: 2013-07-30 * Time: 23:12 */ /** * PHP实现双向队列,双端队列 * 双端队列(dequ ...
- Spring boot 集成ActiveMQ(包含双向队列实现)
集百家之长,成一家之言. 1. 下载ActiveMQ https://mirrors.tuna.tsinghua.edu.cn/apache/activemq/5.15.9/apache-activ ...
- Python_Day_05 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuqe.Queue)
Counter(计数器) 是一个字典的子类,存储形式同样为字典,其中存储的键为字典的元素,值为元素出现的次数,在使用之前我们需要先导入文件 import collections 初始化一个计数器 im ...
- 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuqe.Queue)
Python_Day_05 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuq ...
- python基础知识4——collection类——计数器,有序字典,默认字典,可命名元组,双向队列
1.计数器(counter) Counter是对字典类型的补充,用于追踪值的出现次数. ps:具备字典的所有功能 + 自己的功能 Counter 我们从中挑选一些相对常用的方法来举例: 在上面的例子 ...
- 使用 JavaScript 实现基本队列、优先队列和循环队列
1.基本队列的实现 基本队列的方法中,包含了 ①向队列(尾部)中添加元素(enqueue).②(从队列头部)删除元素(dequeue).③查看队列头部的元素(front).④查看队列是否为空(isEm ...
随机推荐
- netty初步
netty是java的高性能socket框架,linux下基epoll,这里不对他多牛逼作分析,网上资料很多,这里针对一般socket的业务作个例子 几个基本概念: channel类似于socket句 ...
- Java之 Hashtable
Hashtable是Java中键值对数据结构的实现.您可以使用“键”存储和检索“值”,它是存储值的标识符.显然“关键”应该是独一无二的. java.util.Hashtable扩展Dictionary ...
- JQuery基础(选择器、事件、DOM操作)
一.选择器 1.基本选择器 ①id选择器 ②class选择器 ③标签名选择 ④并列选择 ⑤后代选择 代码用法展示: <title></tit ...
- Java学习——Eclipse下载,java配置,新建,输入输出
Eclipse下载,java配置: 基本的软件是JDK,它可以编译.运行Java程序,下载地址是:https://www.oracle.com/technetwork/java/javase/dow ...
- 开发框架-APP:Hybird App
ylbtech-开发框架-APP:Hybird App Hybrid App(混合模式移动应用)是指介于web-app.native-app这两者之间的app,兼具“Native App良好用户交互体 ...
- java-appium-527手机浏览器、PC端程序、grid模式
1.手机浏览器 2.window通用成语自动化 3.appium支持grid模式
- ubuntu 14.04 lamp 安装与配置
一.安装apache 1.打开终端:Ctrl+Alt+T sudo apt-get update 2.通过apt-get方式安装Apache: sudo apt-get install apache2 ...
- Spring mvc的web.xml配置详解
1.spring 框架解决字符串编码问题:过滤器 CharacterEncodingFilter(filter-name) 2.在web.xml配置监听器ContextLoaderListener(l ...
- Python单例模式的4种实现方法
#-*- encoding=utf-8 -*- print '----------------------方法1--------------------------' #方法1,实现__new__方法 ...
- Impala源码分析
问题导读:1.Scheduler任务中Distributed Plan.Scan Range是什么?2.Scheduler基本接口有哪些?3.QuerySchedule这个类如何理解?4.Simple ...