JavaScript中数据结构与算法(一):栈


Posted in Javascript onJune 19, 2015

数据结构与算法JavaScript这本书算是讲解得比较浅显的,优点就是用javascript语言把常用的数据结构给描述了下,书中很多例子来源于常见的一些面试题目,算是与时俱进,业余看了下就顺便记录下来吧

git代码下载:https://github.com/JsAaron/data_structure.git

栈结构

特殊的列表,栈内的元素只能通过列表的一端访问,栈顶

后入先出(LIFO,last-in-first-out)的数据结构

javascript提供可操作的方法, 入栈 push, 出栈 pop,但是pop会移掉栈中的数据

JavaScript中数据结构与算法(一):栈

实现一个栈的实现类

底层存数数据结构采用 数组

因为pop是删除栈中数据,所以需要实现一个查找方法 peek

实现一个清理方法 clear

栈内元素总量查找 length

查找是否还存在元素 empty

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 peek(element){

    return this.dataStore[this.top-1];

}
function pop(){

    return this.dataStore[--this.top];

}
function clear(){

    this.top = 0

}
function length(){

    return this.top

}

回文

回文就是指一个单词,数组,短语,从前往后从后往前都是一样的 12321.abcba

回文最简单的思路就是, 把元素反转后如果与原始的元素相等,那么就意味着这就是一个回文了

这里可以用到这个栈类来操作

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;

    }

}
isPalindrome("aarra") //false

isPalindrome("aaraa") //true

看看这个isPalindrome函数,其实就是通过调用Stack类,然后把传递进来的word这个元素给分解后的每一个组成单元给压入到栈了,根据栈的原理,后入先出的原则,通过pop的方法在反组装这个元素,最后比较下之前与组装后的,如果相等就是回文了

递归

用递归实现一个阶乘算法

5! = 5 * 4 * 3 * 2 * 1 = 120

用递归

function factorial(n) {

    if (n === 0) {

        return 1;

    } else {

        return n * factorial(n - 1);

    }

}

用栈操作

function fact(n) {

    var s = new Stack()

    while (n > 1) {

        //[5,4,3,2]

        s.push(n--);

    }

    var product = 1;

    while (s.length() > 0) {

        product *= s.pop();

    }

    return product;

}
fact(5) //120

通过while把n = 5 递减压入栈,然后再通过一个循环还是根据栈的后入先出的原则,通过pop方法把最前面的取出来与product叠加

Javascript 相关文章推荐
javascript 读取xml,写入xml 实现代码
Jul 10 Javascript
提取字符串中年月日的函数代码
Nov 05 Javascript
JS延迟加载加快页面打开速度示例代码
Dec 30 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
Mar 26 Javascript
javascript的BOM
May 03 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
Jun 26 Javascript
vue mint-ui学习笔记之picker的使用
Oct 11 Javascript
在小程序中使用Echart图表的示例代码
Aug 02 Javascript
javascript实现点击星星小游戏
Dec 24 Javascript
基于javascript的无缝滚动动画1
Aug 07 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
Sep 11 Javascript
用JS写一个发布订阅模式
Nov 07 Javascript
JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
Jun 19 #Javascript
c#程序员对TypeScript的认识过程
Jun 19 #Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
Jun 19 #Javascript
TypeScript 中接口详解
Jun 19 #Javascript
TypeScript 学习笔记之基本类型
Jun 19 #Javascript
使用Chrome浏览器调试AngularJS应用的方法
Jun 18 #Javascript
使用AngularJS创建自定义的过滤器的方法
Jun 18 #Javascript
You might like
php-fpm配置详解
2014/02/12 PHP
CI映射(加载)数据到view层的方法
2016/03/28 PHP
在JavaScript中使用timer示例
2014/05/08 Javascript
JavaScript实现的类字典插入或更新方法实例
2015/07/10 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
详解mpvue开发小程序小总结
2018/07/25 Javascript
详解React native fetch遇到的坑
2018/08/30 Javascript
JavaScript 高性能数组去重的方法
2018/09/20 Javascript
js+html实现点名系统功能
2019/11/05 Javascript
JavaScript获取当前url路径过程解析
2019/12/27 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
2020/05/19 jQuery
jQuery--遍历操作实例小结【后代、同胞及过滤】
2020/05/22 jQuery
node.js如何操作MySQL数据库
2020/10/29 Javascript
python连接mysql调用存储过程示例
2014/03/05 Python
跟老齐学Python之网站的结构
2014/10/24 Python
Python中的pass语句使用方法讲解
2015/05/14 Python
Python3访问并下载网页内容的方法
2015/07/28 Python
Python模块WSGI使用详解
2018/02/02 Python
示例详解Python3 or Python2 两者之间的差异
2018/08/23 Python
在python中实现强制关闭线程的示例
2019/01/22 Python
Python爬虫学习之获取指定网页源码
2019/07/30 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
Python基于DB-API操作MySQL数据库过程解析
2020/04/23 Python
玩转CSS3色彩
2010/01/16 HTML / CSS
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
继承公证书
2014/04/09 职场文书
保密协议书范本
2014/04/22 职场文书
班子成员四风问题自我剖析材料
2014/09/29 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
工作失职检讨书
2015/01/26 职场文书
2016应届毕业生实习评语
2015/12/01 职场文书
《浅水洼里的小鱼》教学反思
2016/02/16 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
咖啡厅里的创业计划书
2019/08/21 职场文书