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 相关文章推荐
extjs tabpanel限制选项卡数量实现思路及代码
Apr 02 Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
Apr 24 Javascript
jquery ajax post提交数据乱码
Nov 05 Javascript
获取3个数组不重复的值的具体实现
Dec 30 Javascript
深入了解Node.js中的一些特性
Sep 25 Javascript
js面向对象之静态方法和静态属性实例分析
Jan 10 Javascript
js获取当前时间(昨天、今天、明天)
Nov 23 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
Jun 28 Javascript
js学习心得_一个简单的动画库封装tween.js
Jul 14 Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
Nov 22 Javascript
vue 移动端适配方案详解
Nov 15 Javascript
你可能不知道的CORS跨域资源共享
Mar 13 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读取文件内容后清空文件示例代码
2014/03/18 PHP
PHP工程师VIM配置分享
2015/12/15 PHP
centos 7.2下搭建LNMP环境教程
2016/11/20 PHP
JavaScript中的History历史对象
2008/01/16 Javascript
javascript 获取表单file全路径
2009/12/31 Javascript
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
JavaScript判断文件上传类型的方法
2014/09/02 Javascript
js实现键盘控制DIV移动的方法
2015/01/10 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
easyui Droppable组件实现放置特效
2015/08/19 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
2016/08/15 Javascript
详解vue 配合vue-resource调用接口获取数据
2017/06/22 Javascript
vue项目优化之通过keep-alive数据缓存的方法
2017/12/11 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
python写的一个squid访问日志分析的小程序
2014/09/17 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
python 实现在shell窗口中编写print不向屏幕输出
2020/02/19 Python
Mysql数据库反向生成Django里面的models指令方式
2020/05/18 Python
使用openCV去除文字中乱入的线条实例
2020/06/02 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
python如何设置静态变量
2020/09/07 Python
浅谈CSS3动画的回调处理
2016/07/21 HTML / CSS
CSS3制作皮卡丘动画壁纸的示例
2020/11/02 HTML / CSS
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
中科前程Java笔试题
2016/11/20 面试题
高校自主招生自荐信
2013/12/09 职场文书
银行职业规划书范文
2013/12/28 职场文书
学校艾滋病宣传活动总结
2015/05/09 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
苦儿流浪记读书笔记
2015/07/01 职场文书