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背投广告代码的完善
Apr 08 Javascript
javascript 对象比较实现代码
Apr 27 Javascript
javascript Keycode对照表
Oct 24 Javascript
js document.write()使用介绍
Feb 21 Javascript
JavaScript处理解析JSON数据过程详解
Sep 11 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
Jun 03 Javascript
jQuery实现6位数字密码输入框
Dec 29 Javascript
vue登录页面cookie的使用及页面跳转代码
Jul 10 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
Feb 10 Javascript
vue使用map代替Aarry数组循环遍历的方法
Apr 30 Javascript
原生js实现拖拽移动与缩放效果
Aug 24 Javascript
JavaScript 防盗链的原理以及破解方法
Dec 29 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中的trait
2017/02/25 PHP
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
JS 各种网页尺寸判断实例方法
2013/04/18 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
Jquery validation remote 验证的缓存问题解决方法
2014/03/25 Javascript
常用的几段javascript代码分享
2014/03/25 Javascript
JavaScript实现简洁的俄罗斯方块完整实例
2016/03/01 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
2016/06/06 Javascript
HTML页面,测试JS对C函数的调用简单实例
2016/08/09 Javascript
AngularJS实现DOM元素的显示与隐藏功能
2016/11/22 Javascript
three.js快速入门【推荐】
2017/01/21 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
浅谈Vue2.0中v-for迭代语法的变化(key、index)
2018/03/06 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
Node.js JSON模块用法实例分析
2019/01/04 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
微信小程序渲染性能调优小结
2019/07/30 Javascript
node crawler如何添加promise支持
2020/02/01 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
jquery实现拖拽小方块效果
2020/12/10 jQuery
Windows系统下多版本pip的共存问题详解
2017/10/10 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
2020/01/16 Python
HTML5实现获取地理位置信息并定位功能
2015/04/25 HTML / CSS
可爱的童装和鞋子:Fabkids
2019/08/16 全球购物
西班牙在线光学:Visual-Click
2020/06/22 全球购物
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
简易离婚协议书范本2014
2014/10/15 职场文书
模范班主任事迹材料
2014/12/17 职场文书
2015年酒店工作总结范文
2015/04/07 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
2016年秋季运动会广播稿
2015/12/21 职场文书
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript