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入门·对象属性方法大总结
Oct 01 Javascript
Jquery实现视频播放页面的关灯开灯效果
May 27 Javascript
使用GruntJS构建Web程序之合并压缩篇
Jun 06 Javascript
DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
Aug 18 Javascript
详解vue父子模版嵌套案例
Mar 04 Javascript
Mac中安装nvm的教程分享
Dec 11 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
Jan 06 jQuery
Vue2.0生命周期的理解
Aug 20 Javascript
vue组件之间数据传递的方法实例分析
Feb 12 Javascript
Vue 指令实现按钮级别权限管理功能
Apr 23 Javascript
详解Vue的ref特性的使用
Jan 24 Javascript
javascript实现前端input密码输入强度验证
Jun 24 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
CodeIgniter使用smtp服务发送html邮件的方法
2015/06/10 PHP
php验证码生成器
2017/05/24 PHP
xml和web特殊字符
2009/04/28 Javascript
Javascript(AJAX)解析XML的代码(兼容FIREFOX/IE)
2010/07/11 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
浅谈javascript回调函数
2014/12/07 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
JavaScript编写推箱子游戏
2015/07/07 Javascript
javascript实现移动端上的触屏拖拽功能
2016/03/04 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
2017/02/14 Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
2017/02/18 Javascript
vue渲染时闪烁{{}}的问题及解决方法
2018/03/28 Javascript
JavaScript EventEmitter 背后的秘密 完整版
2018/03/29 Javascript
React Navigation 使用中遇到的问题小结
2018/05/08 Javascript
浅谈Vue.js路由管理器 Vue Router
2018/08/16 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
vue服务端渲染操作简单入门实例分析
2019/08/28 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
Python获取央视节目单的实现代码
2015/07/25 Python
Python中单、双下划线的区别总结
2017/12/01 Python
python读取excel指定列数据并写入到新的excel方法
2018/07/10 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
飞机制造技术专业求职信
2014/07/27 职场文书
乐山大佛导游词
2015/02/02 职场文书
学生会生活部工作总结2015
2015/03/31 职场文书
围城读书笔记
2015/06/26 职场文书
2015年中学总务处工作总结
2015/07/22 职场文书
浅谈Laravel中使用Slack进行异常通知
2021/05/29 PHP
Python使用DFA算法过滤内容敏感词
2022/04/22 Python