博客
关于我
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/

你可能感兴趣的文章
NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
查看>>
Node JS: < 一> 初识Node JS
查看>>
Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime(72)
查看>>
Node-RED中使用JSON数据建立web网站
查看>>
Node-RED中使用json节点解析JSON数据
查看>>
Node-RED中使用node-random节点来实现随机数在折线图中显示
查看>>
Node-RED中使用node-red-browser-utils节点实现选择Windows操作系统中的文件并实现图片预览
查看>>
Node-RED中使用node-red-contrib-image-output节点实现图片预览
查看>>
Node-RED中使用node-red-node-ui-iframe节点实现内嵌iframe访问其他网站的效果
查看>>
Node-RED中使用Notification元件显示警告讯息框(温度过高提示)
查看>>
Node-RED中实现HTML表单提交和获取提交的内容
查看>>
Node-RED中建立Websocket客户端连接
查看>>
Node-RED中通过node-red-ui-webcam节点实现访问摄像头并截取照片预览
查看>>
node-request模块
查看>>
Node.js 8 中的 util.promisify的详解
查看>>
Node.js 函数是什么样的?
查看>>
Node.js 历史
查看>>
Node.js 在个推的微服务实践:基于容器的一站式命令行工具链
查看>>
Node.js 实现类似于.php,.jsp的服务器页面技术,自动路由
查看>>
Node.js 异步模式浅析
查看>>