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

本文共 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, a
d.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, e
d.dequeueFront();
d.dequeueFront();
console.log(d.toString()); // 输出: c, b, a, a, b, c, d, e
d.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')); // true
console.log(isPalindrome('ada')); // true
console.log(isPalindrome('mazey')); // false

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

你可能感兴趣的文章