JavaScript数据结构与算法-队列练习
2018-01-20 23:39
281 查看
队列的实现
// 队列类 function Deque () { this.dataStore = []; this.enqueueFront = enqueueFront; this.enqueueBack = enqueueBack; this.dequeueFront = dequeueFront; this.dequeueBack = dequeueBack; this.front = front; this.back = back; this.toString = toString; this.empty = empty; } // 入队 - 队首 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 front () { return this.dataStore[0]; } // 读取队尾的元素 function back () { return this.dataStore[this.dataStore.length - 1]; } // 显示队列内所有元素 function toString () { let 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; } }
练习
一. 修改Queue类,形成一个Deque类。这是一个和队列类似的数据结构,允许从队列两端添加和删除元素,因此也叫双向队列。写一段测试程序测试该类。
// 双向队列类 function Deque () { this.dataStore = []; this.enqueueFront = enqueueFront; this.enqueueBack = enqueueBack; this.dequeueFront = dequeueFront; this.dequeueBack = dequeueBack; this.front = front; this.back = back; this.toString = toString; this.empty = empty; } // 入队 - 队首 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 front () { return this.dataStore[0]; } // 读取队尾的元素 function back () { return this.dataStore[this.dataStore.length - 1]; } // 显示队列内所有元素 function toString () { let 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; } } // 测试 let d = new Deque(); d.enqueueFront(`a`); d.enqueueFront(`b`); d.enqueueFront(`c`); d.enqueueFront(`d`); d.enqueueFront(`e`); console.log(d.dataStore); // ["e", "d", "c", "b", "a"] d.enqueueBack(`a`); d.enqueueBack(`b`); d.enqueueBack(`c`); d.enqueueBack(`d`); d.enqueueBack(`e`); console.log(d.dataStore); // ["e", "d", "c", "b", "a", "a", "b", "c", "d", "e"] d.dequeueFront(); d.dequeueFront(); console.log(d.dataStore); // ["c", "b", "a", "a", "b", "c", "d", "e"] d.dequeueBack(); d.dequeueBack(); d.dequeueBack(); console.log(d.dataStore); // ["c", "b", "a", "a", "b"]
二. 使用前面完成的Deque类来判断一个给定单词是否为回文。
function isPalindrom (word) { let d = new Deque(); let max = word.length; for (let i = 0; i < max; ++i) { d.enqueueBack(word[i]); } while (d.dataStore.length > 1) { if (d.dequeueFront() !== d.dequeueBack()) { return false; } } return true; } // 示例 console.log(isPalindrom(`racecar`)); // true console.log(isPalindrom(`ada`)); // true console.log(isPalindrom(`mazey`)); // false
相关文章推荐
- JavaScript数据结构与算法-散列练习
- JavaScript数据结构与算法-集合练习
- javascript实现数据结构与算法系列:队列 -- 链队列和循环队列实现及示例
- 为什么我要放弃javaScript数据结构与算法(第四章)—— 队列
- JavaScript数据结构与算法(二) 队列的实现
- 学习JavaScript数据结构与算法(三)——队列
- Javascript(二)-08-(常见对象-Array-练习-堆栈和队列结构)
- 队列的实现 -- 数据结构与算法的javascript描述 第五章
- 数据结构与算法分类练习--栈 队列 堆
- JavaScript数据结构与算法-链表练习
- JavaScript数据结构与算法(三) 优先级队列的实现
- JavaScript数据结构与算法-字典练习
- javascript 显示当前时间 练习01
- JavaScript编程--任意输入一个数判断是不是闰年,数列求和练习
- 数据结构与算法JavaScript - 队列
- 数据结构与算法学习 第1季03 栈 队列 树 图
- JavaScript选项小练习
- JavaScript队列、优先队列与循环队列
- Java程序练习-队列操作
- 3185 队列练习 1 3186 队列练习 2