博客
关于我
JavaScript数据结构与算法-队列练习
阅读量:438 次
发布时间:2019-03-06

本文共 2881 字,大约阅读时间需要 9 分钟。

队列的实现

队列是一种先进先出的数据结构,常用于操作系统和网络编程中。以下是基于 JavaScript 的队列实现代码:

function Deque() {    this.dataStore = [];    this.enqueueFront = enqueueFront;    this.enqueueBack = enqueueBack;    this.dequeueFront = dequeueFront;    this.dequeueBack = dequeueBack;    this.front = function() {        return this.dataStore[0];    };    this.back = function() {        return this.dataStore[this.dataStore.length - 1];    };    this.toString = function() {        let retStr = '';        for (let i = 0; i < this.dataStore.length; i++) {            retStr += `${this.dataStore[i]}\n`;        }        return retStr;    };    this.empty = function() {        return this.dataStore.length === 0;    };}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 Deque() {    this.dataStore = [];    this.enqueueFront = enqueueFront;    this.enqueueBack = enqueueBack;    this.dequeueFront = dequeueFront;    this.dequeueBack = dequeueBack;    this.front = function() {        return this.dataStore[0];    };    this.back = function() {        return this.dataStore[this.dataStore.length - 1];    };    this.toString = function() {        let retStr = '';        for (let i = 0; i < this.dataStore.length; i++) {            retStr += `${this.dataStore[i]}\n`;        }        return retStr;    };    this.empty = function() {        return this.dataStore.length === 0;    };}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);}

测试代码

let d = new Deque();d.enqueueFront('a');d.enqueueFront('b');d.enqueueFront('c');d.enqueueFront('d');d.enqueueFront('e');console.log(d.toString()); // 输出: e, d, c, b, ad.enqueueBack('a');d.enqueueBack('b');d.enqueueBack('c');d.enqueueBack('d');d.enqueueBack('e');console.log(d.toString()); // 输出: e, d, c, b, a, a, b, c, d, ed.dequeueFront();d.dequeueFront();console.log(d.toString()); // 输出: c, b, a, a, b, c, d, ed.dequeueBack();d.dequeueBack();d.dequeueBack();console.log(d.toString()); // 输出: c, b, a, a, b

练习二:判断单词是否是回文

使用双向队列,可以轻松判断一个单词是否为回文。以下是实现代码:

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

转载地址:http://gxmyz.baihongyu.com/

你可能感兴趣的文章
npm的常用操作---npm工作笔记003
查看>>
npm的常用配置项---npm工作笔记004
查看>>
npm的问题:config global `--global`, `--local` are deprecated. Use `--location=global` instead 的解决办法
查看>>
npm编译报错You may need an additional loader to handle the result of these loaders
查看>>
npm设置淘宝镜像、升级等
查看>>
npm设置源地址,npm官方地址
查看>>
npm设置镜像如淘宝:http://npm.taobao.org/
查看>>
npm配置安装最新淘宝镜像,旧镜像会errror
查看>>
NPM酷库052:sax,按流解析XML
查看>>
npm错误 gyp错误 vs版本不对 msvs_version不兼容
查看>>
npm错误Error: Cannot find module ‘postcss-loader‘
查看>>
npm,yarn,cnpm 的区别
查看>>
NPOI
查看>>
NPOI之Excel——合并单元格、设置样式、输入公式
查看>>
NPOI初级教程
查看>>
NPOI利用多任务模式分批写入多个Excel
查看>>
NPOI在Excel中插入图片
查看>>
NPOI将某个程序段耗时插入Excel
查看>>
NPOI格式设置
查看>>
NPOI设置单元格格式
查看>>