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 高级语法介绍
Jun 15 Javascript
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
Dec 28 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
Dec 12 Javascript
jQuery中delegate()方法用法实例
Jan 19 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
Feb 01 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
Feb 20 Javascript
使用jquery datatable和bootsrap创建表格实例代码
Mar 17 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
May 11 Javascript
JavaScript实现三级联动菜单实例代码
Jun 26 Javascript
Javascript中的getter和setter初识
Aug 17 Javascript
vue使用echarts实现水平柱形图实例
Sep 09 Javascript
js重写alert事件(避免alert弹框标题出现网址)
Dec 04 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实现图片缩放功能类
2013/12/18 PHP
PHP中isset()和unset()函数的用法小结
2014/03/11 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
wordpress网站转移到本地运行测试的方法
2017/03/15 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
js window.event对象详尽解析
2009/02/17 Javascript
JavaScript 学习笔记(五)
2009/12/31 Javascript
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
2013/11/15 Javascript
Javascript正则控制文本框只能输入整数或浮点数
2014/09/02 Javascript
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
微信小程序 页面之间传参实例详解
2017/01/13 Javascript
bootstrapvalidator之API学习教程
2017/06/29 Javascript
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
Vue服务端渲染实践之Web应用首屏耗时最优化方案
2019/03/22 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
2019/05/13 Javascript
JavaScript页面倒计时功能完整示例
2019/05/15 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
Vue如何获取数据列表展示
2019/12/11 Javascript
[00:12]2018DOTA2亚洲邀请赛 Somnus丶M出阵单挑
2018/04/06 DOTA
Python开发常用的一些开源Package分享
2015/02/14 Python
Python中selenium实现文件上传所有方法整理总结
2017/04/01 Python
ubuntu系统下使用pm2设置nodejs开机自启动的方法
2018/05/12 NodeJs
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
python使用knn实现特征向量分类
2018/12/26 Python
Python程序包的构建和发布过程示例详解
2019/06/09 Python
执行Django数据迁移时报 1091错误及解决方法
2019/10/14 Python
Python高级特性之闭包与装饰器实例详解
2019/11/19 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
python实现五子棋程序
2020/04/24 Python
Python如何在bool函数中取值
2020/09/21 Python
世界上最大的皮肤科医生拥有和经营的美容网站:LovelySkin
2021/01/03 全球购物
天逸系统(武汉)有限公司Java笔试题
2015/12/29 面试题
大学生社会实践评语
2014/04/25 职场文书