命令
数据结构和算法javascript是一个相对简单的解释。优点是常用的数据结构是用JavaScript语言描述的。书中很多例子来自一些常见的面试问题,可以算是与时俱进。业余阅读后,顺便记录下来。
Git代码下载:https://github.com/JsAaron/data_structure.git
堆栈结构
特殊列表,堆栈中的元素只能通过列表的一端(堆栈的顶部)访问
后进先出数据结构
Javascript提供了可操作的方法,推栈和弹出栈,但是弹出会从栈中移除数据
实现堆栈的实现类
底层存储数据结构采用数组
因为pop会删除堆栈中的数据,所以有必要实现查找方法peek
实现一个清理方法,清除
要查找长度的堆栈元素总数
要找出是否还有一个元素是空的,请复制如下代码: Function stack () {this。datastore=[] this。top=0;this . push=push this . pop=pop this . peek=peek this . length=length;}
函数push(element){ this . datastore[this . top]=element;}
函数peek(element){ return this . datastore[this . top-1];}
函数pop(){ return this . datastore[-this . top];}
函数clear(){ this.top=0}
函数长度(){ return this.top}
回族语言
回文是指一个词、一个数组、一个短语,从前面到后面都是一样的。
回文最简单的想法是,如果倒排的元素等于原元素,就说明是回文
这里可以使用这个栈类进行操作,复制代码如下:函数是回文(word){ var s=newstack()for(var I=0;I .字长;I){ s . push(word[I])} var rword=' ';while(s . length)(0){ rword=s . pop();} if(word==rword){ return true;} else { return false}}
ispalindome(' aarra ')//false ispalindome(' aaraa ')//true
看看这个isPalindrome函数,其实就是通过调用Stack类,然后针对每个分解的组件单元,将传递的word元素推入栈中,根据栈的原理,后进先出的原理,用pop的方法来拆解这个元素,最后和组装好的进行比较。如果相等,就是回文。
递归
用递归实现阶乘算法
5!=5 * 4 * 3 * 2 * 1=120
使用递归复制代码如下:函数阶乘(n){ if(n===0){ return 1;} else {返回n *阶乘(n-1);}}
堆叠操作
复制代码如下:函数fact(n){ var s=newstack()while(n ^ 1){//[5,4,3,2]s . push(n-);} var乘积=1;while(s . length)(0){ product *=s . pop();}退回产品;}
事实(5) //120
边推边把n=5推入栈中,然后取出前面的一个,通过循环或按照栈的后进先出原则,用pop方法叠加乘积