数据结构与算法JavaScript描述[第五章](队列)
来源:互联网 发布:武极天下神迹进阶数据 编辑:程序博客网 时间:2024/05/17 04:46
//队列基类 function Queue(){ var _this = this; this.dataStore = []; this.enqueue = function(element){ this.dataStore.push(element); }; this.dequeue = function () { this.dataStore.shift(); } this.front = function () { return this.dataStore[0]; } this.back = function () { return this.dataStore[this.dataStore.length - 1]; } this.toString = function () { var str = ''; for(var i = 0; i < this.dataStore.length; i++){ str += this.dataStore[i]; } return str; } this.empty = function () { if(this.dataStore.length == 0){ return true; }else{ return false; } } }
1.修改Queue类,行程一个Deque类。这是一个和队列类似的数据结构,允许从队列两端添加和删除元素,因此也叫双向队列。写一段测试程序测试该类。
//双向队列 function Deque() {}; //继承队列 Deque.prototype = new Queue(); //重写队列 dequeue 方法 Deque.prototype.dequeue = function (direction) { var _this = this; var strategy = { 'l':function () { return _this.dataStore.shift(); }, 'r':function () { return _this.dataStore.pop(); } }; return strategy[direction](); } //重写队列 enqueue 方法 Deque.prototype.enqueue = function (direction,element) { var _this = this; var strategy = { 'l':function () { _this.dataStore.unshift(element); }, 'r':function () { _this.dataStore.push(element); } }; strategy[direction](); } var d = new Deque(); //两端添加测试 d.enqueue('r','right'); d.enqueue('r','right'); d.enqueue('l','left'); d.enqueue('r','right'); //两端删除测试 d.dequeue('l'); d.dequeue('r'); console.log(d.dataStore);
2.使用前面完成的Deque类来判断一个给定单词是否为回文。
//判断是否为回文 function Palindrome() {}; Palindrome.prototype = new Deque(); //判断是否为回文 Palindrome.prototype.isPalindrome = function (word) { this.dataStore = []; for(var i = 0; i < word.length; i++){ this.enqueue('l',word.charAt(i)); } var left = new Deque(); var right = new Deque(); left.dataStore = this.dataStore.concat(); right.dataStore = this.dataStore.concat(); var lt = []; var rt = []; for(var i = 0,len = left.dataStore.length; i < len; i++){ lt.push(left.dequeue('l')); rt.push(right.dequeue('r')); } if(lt.join('') == rt.join('')){ console.log('is'); }else{ console.log('no'); } } new Palindrome().isPalindrome('abc'); new Palindrome().isPalindrome('aca'); new Palindrome().isPalindrome('aca');
3.修改例5-5中的有限队列,使得优先级搞得元素优先吗也打。写一段程序测试你的改动。var PriorQueue = function () {}; PriorQueue.prototype = new Queue(); PriorQueue.prototype.dequeue = function () { var prior = this.dataStore[0].code; var index = 0; var max = this.dataStore[0].code; for(var i = 0; i < this.dataStore.length; i++){ var item = this.dataStore[i]; if(item.code > max){ max = item.code; index = i; } } return this.dataStore.splice(index,1); } var priorQueue = new PriorQueue(); priorQueue.enqueue(new Patient('a',30)); priorQueue.enqueue(new Patient('b',40)); priorQueue.enqueue(new Patient('c',20)); priorQueue.enqueue(new Patient('d',20)); priorQueue.enqueue(new Patient('e',80)); console.log(priorQueue.dequeue());
4.修改5-5中的候诊室程序,使得候诊室内的活动可以被控制。写一个类似菜单系统,让用户可以进行如下选择:a.患者进入候诊室
b.患者就诊
c.显示等待就诊患者名单
//就诊程序 var Visits = function () {}; Visits.prototype = new PriorQueue(); //让患者进入候诊室// params 1 代表患者名字// params 2 代表患者优先级 Visits.prototype.in = function (name,prior) { this.enqueue(new Patient(name,prior)); } //患者就诊 Visits.prototype.visit = function () { return this.dequeue(); } //显示患者名单 Visits.prototype.showList= function () { console.log(this.dataStore); } /*假设有以下患者 * */ var visit = new Visits(); visit.in('a',30); visit.in('b',40); visit.in('c',20); visit.in('e',10); console.log(visit.dequeue()); visit.showList();
1 0
- 数据结构与算法JavaScript描述[第五章](队列)
- 数据结构与算法javascript描述之队列
- 数据结构与算法C#语言描述第五章栈和队列
- 数据结构与算法C#语言描述第五章栈和队列
- JavaScript描述数据结构与算法——队列
- 数据结构与算法javascript描述(二) 优先队列实例
- 数据结构与算法Javascript描述(二)队列
- 《数据结构与算法JavaScript描述》
- 数据结构与算法JavaScript - 队列
- javascript数据结构与算法--队列
- 第三章:数据结构与算法javascript描述: 列表
- 数据结构与算法JavaScript描述[第二章](数组)
- 数据结构与算法JavaScript描述[第三章](列表)
- 数据结构与算法JavaScript描述[第六章](链表)
- 数据结构与算法JavaScript描述[第七章](字典)
- 数据结构与算法javascript描述第2章
- 数据结构与算法JavaScript描述 | 数组
- 数据结构与算法JavaScript (二) :队列
- apc缓存
- leetcode-114. Flatten Binary Tree to Linked List
- Android -面向对象开发思维模式-帮助你逃离面向过程的开发的痛苦深渊
- Failed to initialize storage module: user 的解决方案
- 全排列问题
- 数据结构与算法JavaScript描述[第五章](队列)
- Xshell远程控制linux
- 006_深入浅出mysql—触发器
- linux crontab & 每隔10秒执行一次
- ideal15的创建maven项目
- A Structure from Motion System
- MFC 获取字符串的第n个字符
- iOS 修改TabBar的高度
- egret添加字体样式