JavaScript数据结构与算法01----优先级队列
2022/2/8 20:43:35
本文主要是介绍JavaScript数据结构与算法01----优先级队列,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
最近在用javascript刷数据结构和算法,教程是B站上面coderwhy王红元老师的视频----六天精通JavaScript数据结构与算法系统教程,js入门到精通算法,
数据结构和算法是前端进入大厂必备的知识和技能,以前在校招的时候不懂,为什么前端还总爱考数据结构和算法,对于我这种非计算机专业的学生很不友好,现在自我可以独立解决一些常见的项目问题了,就感觉自己需要进阶了,需要去锻炼一下自己的逻辑能力了,正好借着大四在公司实习的这段时间学习一下。重新来到csdn来记录一下自己将来一段时间的成长和收获,以及再敲代码的过程中自己所遇到的逻辑上的难点。
以下是我自己,按照老师的讲解自己重新用数组封装了数据结构里面的优先级队列,
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>优先级队列</title> </head> <body> <script> function PriorityQueue() { var items = [] function QueueElement(element,priority) { this.element = element this.priority = priority } PriorityQueue.prototype.enqueue = function(element,priority) { var queueElement = new QueueElement(element,priority) if(this.isEmpty()) { items.push(queueElement) }else { var addEnd = true for(var i=0; i<items.length;i++){ if(queueElement.priority < items[i].priority) { addEnd = false items.splice(i,0,queueElement) break } } if(addEnd) { items.push(queueElement) } } } PriorityQueue.prototype.dequeue = function() { return items.shift() } PriorityQueue.prototype.front = function() { return items[0] } PriorityQueue.prototype.isEmpty = function() { return items.length == 0 } PriorityQueue.prototype.size = function() { return items.length } PriorityQueue.prototype.toString = function() { var resultStr = '' for(var i=0; i<items.length;i++){ resultStr+=items[i].element+'-'+items[i].priority+' ' } return resultStr } } var pQueue = new PriorityQueue() pQueue.enqueue('abc',10) pQueue.enqueue('cba',5) pQueue.enqueue('nba',12) pQueue.enqueue('mba',3) console.log(pQueue.toString()); </script> </body> </html>
第一个遇到的问题就是,封装的QueueElement函数是放到PriorityQueue.prototype.enqueue 函数里面还是外面,一开始以为只能放到enqueue函数里面,因为放到外面, 里面访问不到外面的函数,放在里面也没报错,后来看老师的笔记,发现老师把 QueueElement函数放在了enqueue函数外面,于是就想到了,作用域链,放到外面 也会被找到,作用域链先从作用域里面查找,里面没有再向外面查找,而放在外面的 一个好处我感觉就是不会让enqueue函数再多加一层函数,可以减轻enqueue的负担。
第二个遇到的逻辑问题就是这里
if(this.isEmpty()) { items.push(queueElement) }else { var addEnd = true for(var i=0; i<items.length;i++){ if(queueElement.priority < items[i].priority) { addEnd = false items.splice(i,0,queueElement) break } } if(addEnd) { items.push(queueElement) } }
在判断优先级的时候,第一次没有break终止循环,导致的结果就是一个元素被重复 添加多次,而且第一次用了forEach循环,当break时,报错---break时一个无效的语句, forEach循环不能用break跳出循环,第二个问题就是没有加addEnd标志位,没有考虑到 ,如果添加的元素的优先级比之前的任何一个元素的优先级都小,那新添加的元素就不会又任何操作, 这不符合我们想要的逻辑,正常逻辑应该是,如果添加的元素的优先级都比之前的任何一个小,那么新添加的元素应该被插入到数组的最后面。
这篇关于JavaScript数据结构与算法01----优先级队列的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23JAVA语音识别项目入门教程
- 2024-11-23Java云原生学习:从入门到实践
- 2024-11-22Java创业学习:初学者的全面指南
- 2024-11-22JAVA创业学习:零基础入门到实战应用教程
- 2024-11-22Java创业学习:从零开始的Java编程入门教程
- 2024-11-22Java对接阿里云智能语音服务学习教程
- 2024-11-22JAVA对接阿里云智能语音服务学习教程
- 2024-11-22Java对接阿里云智能语音服务学习教程
- 2024-11-22Java副业学习:零基础入门到实战项目
- 2024-11-22Java副业学习:零基础入门指南