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 相关文章推荐
XHTML-Strict 内允许出现的标签
Dec 11 Javascript
JQuery Ajax 跨域访问的解决方案
Mar 12 Javascript
自制基于jQuery的智能提示插件一枚
Feb 18 Javascript
基于JavaScript获取鼠标位置的各种方法
Dec 16 Javascript
实例解析jQuery中proxy()函数的用法
May 24 Javascript
JQuery对ASP.NET MVC数据进行更新删除
Jul 13 Javascript
关于axios返回空对象的问题解决
Apr 04 Javascript
js实现微信/QQ直接跳转到支付宝APP打开口令领红包功能
Jan 09 Javascript
Angularjs Promise实例详解
Mar 15 Javascript
对angular 实时更新模板视图的方法$apply详解
Oct 09 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
Jul 30 Javascript
vue 把二维或多维数组转一维数组
Apr 24 Vue.js
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基础知识:类与对象(1)
2006/12/13 PHP
php FLEA中二叉树数组的遍历输出
2012/09/26 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
2015/04/08 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
2015/08/25 PHP
js 字符串操作函数
2009/07/25 Javascript
IE 条件注释详解总结(附实例代码)
2009/08/29 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
2014/09/26 NodeJs
JavaScript中的闭包(Closure)详细介绍
2014/12/30 Javascript
JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例
2016/01/26 Javascript
js上传图片预览的实现方法
2017/05/09 Javascript
Vue结合Video.js播放m3u8视频流的方法示例
2018/05/04 Javascript
Vue 中对图片地址进行拼接的方法
2018/09/03 Javascript
jQuery实现的老虎机跑动效果示例
2018/12/29 jQuery
JavaScript显式数据类型转换详解
2019/03/18 Javascript
Python中处理字符串之isalpha()方法的使用
2015/05/18 Python
Python中的自省(反射)详解
2015/06/02 Python
使用Python求解最大公约数的实现方法
2015/08/20 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
Python pandas常用函数详解
2018/02/07 Python
pandas筛选某列出现编码错误的解决方法
2018/11/07 Python
python如何使用代码运行助手
2020/07/03 Python
如何让python的运行速度得到提升
2020/07/08 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
俄罗斯优惠券网站:BIGLION
2017/05/21 全球购物
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
财务人员的自我评价范文
2014/03/03 职场文书
生活部的活动方案
2014/08/19 职场文书
廉洁自律承诺书2015
2015/01/22 职场文书
2015人事行政工作总结范文
2015/05/21 职场文书
银行安全保卫工作总结
2015/08/10 职场文书
大学副班长竞选稿
2015/11/21 职场文书
python 实现mysql自动增删分区的方法
2021/04/01 Python
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python