本文共 2983 字,大约阅读时间需要 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/