《数据结构与算法-Javascript描述》
Posted 京沙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《数据结构与算法-Javascript描述》相关的知识,希望对你有一定的参考价值。
今年的上半年,项目原因大部分时间在写js,这期间把easyui,echarts,bootstrap都用了点皮毛,写的多了,自然也多了些感觉,不过仅局限于运用层面,于是决定再系统的看些javascript方面的书,强化运用能力,便有了这本~来自于国内知名公司前端工程师翻译自国外的书,见名知意用Javascript角度来讲数据结构和算法,一方面可以把javascript的基础知识加强,一方面加深数据结构以及算法的理解和应用。
全书篇幅不长,第一章简明扼要对javascript做了简单的介绍,基本语法、运算符、流程控制方面的基础知识,中间按章节依次对常用数据结构进行讲解。javascript除提供原生态的数组外,其他数据结构都需要自己实现,没有高级语言c#,java来的这么方便。常用数据结构分别是列表,栈,队列,链表,字典,散列,集合,二叉树,图,最后三章是算法相关,分别是排序算法、检索算法、以及两个高级算法,动态规划和贪心算法。
本书循序渐进,层层深入,从最基础的列表开始,到栈、队列,链表、hashtable、set、tree等的实现结合代码通俗易懂的呈现出来, 并结合一些实例加强对数据结构的理解。
在看完数据结构部分章节后,并动手将书中的示例敲了一遍加深印象,与此同时还有额外的收获,对js中的this关键字有了更进一步的理解。重温了一遍数据结构在js中的实现,特别是hashtable章节,对散列过程中的碰撞做了很详细的说明,如何避免碰撞的产生和提升性能方面都给出了解决方案,为今后编写高质量代码和优化代码提供了一定的借鉴作用。
列表
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>Javascript-List</title> </head> <body> <script type="text/javascript"> function List(){ this.listSize=0; this.pos=0; this.dataStore=[]; this.clear=clear; this.find=find; this.toString=toString; this.insert=insert; this.append=append; this.remove=remove; this.front=front; this.end=end; this.prev=prev; this.next=next; this.length=length; this.currPos=currPos; this.moveTo=moveTo; this.contains=contains; this.getElement=getElement; } function append(element){ this.dataStore[this.listSize++]=element; } function find(element){ for(var i=0;i<this.dataStore.length;i++){ if(this.dataStore[i]==element){ return i; } } return -1; } function remove(element){ var foundAt=this.find(element); if(foundAt>-1){ this.dataStore.splice(foundAt,1); --this.listSize; return true; } return false; } function length(){ return this.listSize; } function toString(){ return this.dataStore; } function clear(){ delete this.dataStore; this.dataStore=[]; this.listSize=this.pos=0; } function insert(element,after){ var insertPos=this.find(after); if(insertPos>-1){ this.dataStore.splice(insertPos+1,0,element); ++this.listSize; return true; } return false; } function front(){ this.pos=0; } function end(){ this.pos=this.listSize-1; } function prev(){ if(this.pos>0){ --this.pos; } } function next(){ if(this.pos<this.listSize-1){ ++this.pos; } } function currPos(){ return this.pos; } function contains(element){ for(var i=0;i<this.dataStore.length;i++){ if(this.dataStore[i]==element){ return true; } } return false; } function getElement(){ return this.dataStore[this.pos]; } var names=new List(); names.append("123"); names.append("456"); names.append(1); names.append("789"); console.log(names.toString()); names.front(); names.next(); names.next(); console.log(names.getElement()); </script> </body> </html>
栈
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>Javascript-Stack</title> </head> <body> <script type="text/javascript"> function Stack(){ this.dataStore=[]; this.top=0; this.push=push; this.pop=pop; this.peek=peek; this.length=length; } function push(element){ this.dataStore[this.top++]=element; } function pop(){ return this.dataStore[--this.top]; } function peek(){ return this.dataStore[this.top-1]; } function length(){ return this.top; } function clear(){ this.top=0; } var s=new Stack(); s.push("1"); s.push("2"); console.log(s.length()); console.log(s.pop()); console.log(s.length()); s.push("3"); console.log(s.length()); console.log(s.peek()); s.pop(); console.log(s.peek()); function isPalindrome(word){ var s=new Stack(); for(var i=0;i<word.length;i++){ s.push(word[i]); } var rword=""; while(s.length()>0){ rword+=s.pop(); } if(word==rword){ return true; }else{ return false; } } var word="hello"; console.log(word +" is palindrome : "+isPalindrome(word)); word="level"; console.log(word +" is palindrome : "+isPalindrome(word)); word="racecar"; console.log(word +" is palindrome : "+isPalindrome(word)); </script> </body> </html>
队列
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>Javascript-Queue</title> </head> <body> <script type="text/javascript"> function Queue(){ this.dataStore=[]; this.enqueue=enqueue; this.dequeue=dequeue; this.front=front; this.back=back; this.toString=toString; this.empty=empty; } function enqueue(element){ this.dataStore.push(element); } function dequeue(){ return this.dataStore.shift(); } function front(){ return this.dataStore[0]; } function back(){ return this.dataStore[this.dataStore.length-1]; } function toString(){ var reStr=""; for(var i=0;i<this.dataStore.length;i++){ reStr+=this.dataStore[i]JavaScript算法(归并排序与快速排序)如何评价《数据结构与算法 JavaScript 语言描述》这本书