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 相关文章推荐
动态调用CSS文件的JS代码
Jul 29 Javascript
extjs3 combobox取value和text案例详解
Feb 06 Javascript
杨氏矩阵查找的JS代码
Mar 21 Javascript
node.js使用require()函数加载模块
Nov 26 Javascript
基于jQuery实现多层次的手风琴效果附源码
Sep 21 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
Dec 24 Javascript
Bootstrap框架安装使用详解
Jan 21 Javascript
js判断是否是手机页面
Mar 17 Javascript
ES6新特性五:Set与Map的数据结构实例分析
Apr 21 Javascript
JavaScript html5 canvas实现图片上画超链接
Oct 20 Javascript
Vue 项目部署到服务器的问题解决方法
Dec 05 Javascript
JS尾递归的实现方法及代码优化技巧
Jan 19 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
ftp类(example.php)
2006/10/09 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
Javascript解决常见浏览器兼容问题的12种方法
2010/01/04 Javascript
jquery改变tr背景色的示例代码
2013/12/28 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
2015/07/27 Javascript
Bootstrap实现渐变顶部固定自适应导航栏
2020/08/27 Javascript
Vue+jquery实现表格指定列的文字收缩的示例代码
2018/01/09 jQuery
JS 实现百度搜索功能
2018/02/01 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
基于vue实现探探滑动组件功能
2020/05/29 Javascript
详解JavaScript 异步编程
2020/07/13 Javascript
js和jquery判断数据类型的4种方法总结
2020/08/28 jQuery
原生js实现自定义滚动条组件
2021/01/20 Javascript
[56:35]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第二局
2016/02/27 DOTA
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
Python中字典和JSON互转操作实例
2015/01/19 Python
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
Python模拟三级菜单效果
2017/09/11 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
Python GUI布局尺寸适配方法
2018/10/11 Python
python 发送json数据操作实例分析
2019/10/15 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
2020/04/25 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
python wsgiref源码解析
2021/02/06 Python
法国在线药房:DoctiPharma
2020/10/21 全球购物
彪马香港官方网上商店:PUMA香港
2020/12/06 全球购物
清洁工表扬信
2014/01/08 职场文书
中学生期中自我鉴定
2014/04/20 职场文书
荆州古城导游词
2015/02/06 职场文书
施工员岗位职责
2015/02/10 职场文书
工程服务质量承诺书
2015/04/29 职场文书
党支部审查意见
2015/06/02 职场文书
2019通用版导游词范本!
2019/08/07 职场文书