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 相关文章推荐
[原创]图片分页查看
Aug 28 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
Dec 30 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
Dec 11 Javascript
利用jQuery和CSS将背景图片拉伸
Oct 16 Javascript
JavaScript创建对象的方式小结(4种方式)
Dec 17 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
May 18 Javascript
微信公众号菜单配置微信小程序实例详解
Mar 31 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
May 02 Javascript
jQuery实现的弹幕效果完整实例
Sep 06 jQuery
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
Dec 06 Javascript
纯js代码生成可搜索选择下拉列表的实例
Jan 11 Javascript
jQuery仿移动端支付宝键盘的实现代码
Aug 15 jQuery
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获取某个目录大小的代码
2008/09/10 PHP
php数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
2011/10/29 PHP
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
Laravel5中contracts详解
2015/03/02 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
JavaScript获取页面上某个元素的代码
2011/03/13 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
2014/02/08 Javascript
jquery实现拖拽调整Div大小
2015/01/30 Javascript
jQuery找出网页上最高元素的方法
2015/03/20 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
老生常谈JavaScript 函数表达式
2016/09/01 Javascript
微信小程序 数组(增,删,改,查)等操作实例详解
2017/01/05 Javascript
jQuery布局组件EasyUI Layout使用方法详解
2017/02/28 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
2017/09/15 Javascript
JS实现处理时间,年月日,星期的公共方法示例
2019/05/31 Javascript
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
Python中random模块用法实例分析
2015/05/19 Python
基于python内置函数与匿名函数详解
2018/01/09 Python
《Python学习手册》学习总结
2018/01/17 Python
python爬取各类文档方法归类汇总
2018/03/22 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
Python数据持久化存储实现方法分析
2019/12/21 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
用python制作个音乐下载器
2021/01/30 Python
Clearly新西兰:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
斯福泰克软件测试面试题
2015/02/16 面试题
同学聚会策划方案
2014/06/06 职场文书
装修活动策划方案
2014/08/27 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
法定代表人证明书
2014/11/28 职场文书
董事长岗位职责
2015/02/13 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle