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 相关文章推荐
Ajax,UTF-8还是GB2312 eval 还是execScript
Nov 13 Javascript
javascript 图片上一张下一张链接效果代码
Mar 12 Javascript
js 图片等比例缩放代码
May 13 Javascript
JavaScript错误处理
Feb 03 Javascript
属于你的jQuery提示框(Tip)插件
Jan 20 Javascript
全面解析bootstrap格子布局
May 22 Javascript
JS实现合并json对象的方法
Oct 10 Javascript
angular中两种表单的区别(响应式和模板驱动表单)
Dec 06 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
Apr 09 Javascript
vue element 中的table动态渲染实现(动态表头)
Nov 21 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
May 09 Javascript
Javascript节流函数throttle和防抖函数debounce
Dec 03 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+DBM的同学录程序(5)
2006/10/09 PHP
一段php加密解密的代码
2007/07/16 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
phpmyadmin打开很慢的解决方法
2014/04/21 PHP
详细对比php中类继承和接口继承
2018/10/11 PHP
PHP实现批量修改文件名的方法示例
2019/09/18 PHP
我见过最全的个人js加解密功能页面
2007/12/12 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
jQuery+正则+文本框只能输入数字的实现方法
2016/10/07 Javascript
js拖拽功能实现代码解析
2016/11/28 Javascript
详解vue-router 2.0 常用基础知识点之router-link
2017/05/10 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
vue路由的配置和页面切换详解
2020/09/09 Javascript
[56:47]Ti4 循环赛第三日 iG vs Liquid
2014/07/12 DOTA
Python 列表list使用介绍
2014/11/30 Python
python实现通过代理服务器访问远程url的方法
2015/04/29 Python
python Matplotlib画图之调整字体大小的示例
2017/11/20 Python
Python中@property的理解和使用示例
2019/06/11 Python
python 缺失值处理的方法(Imputation)
2019/07/02 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
python怎么判断素数
2020/07/01 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
2021/01/01 Python
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
机电专业体育教师求职信
2013/09/21 职场文书
学前班教师的自我鉴定
2013/12/05 职场文书
学习雷锋月活动总结
2014/07/03 职场文书
大班下学期幼儿评语
2014/12/30 职场文书
2016银行求职自荐信
2016/01/28 职场文书
庭外和解协议书
2016/03/23 职场文书
《孙子兵法》:欲成大事者,需读懂这些致胜策略
2019/08/23 职场文书
浅谈pytorch中的dropout的概率p
2021/05/27 Python