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初学困境—js初学
Dec 29 Javascript
jQuery 学习第五课 Ajax 使用说明
May 17 Javascript
JS HTML5 音乐天气播放器(Ajax获取天气信息)
May 26 Javascript
Javascript改变CSS样式(局部和全局)
Dec 18 Javascript
javascript设计模式Constructor(构造器)模式
Aug 19 Javascript
AngularJS中的DOM操作用法分析
Nov 04 Javascript
js querySelector() 使用方法
Dec 21 Javascript
详解vue2 $watch要注意的问题
Sep 08 Javascript
VUE长按事件需求详解
Oct 18 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
Oct 25 Javascript
Vue Components 数字键盘的实现
Sep 18 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
Dec 25 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简单提示框alert封装函数
2010/08/08 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
2014/11/19 PHP
PHP中类的继承和用法实例分析
2016/05/24 PHP
基于jquery的合并table相同单元格的插件(精简版)
2011/04/05 Javascript
jQuery插件开发基础简单介绍
2013/01/07 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
jquery中常用的SET和GET$(”#msg”).html循环介绍
2013/10/09 Javascript
javascript实现阻止iOS APP中的链接打开Safari浏览器
2014/06/12 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
2015/12/31 Javascript
javascript RegExp 使用说明
2016/05/21 Javascript
微信小程序 setData使用方法及常用错误解决办法
2017/05/11 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
详解React-Native全球化多语言切换工具库react-native-i18n
2017/11/03 Javascript
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
浅谈webpack组织模块的原理
2018/03/10 Javascript
layui的table单击行勾选checkbox功能方法
2018/08/14 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
javascript实现切割轮播效果
2019/11/28 Javascript
解决Antd Table组件表头不对齐的问题
2020/10/27 Javascript
Python下的subprocess模块的入门指引
2015/04/16 Python
深入浅析Python中join 和 split详解(推荐)
2016/06/30 Python
Python输出各行命令详解
2018/02/01 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
python操作cfg配置文件方式
2019/12/22 Python
python中实现栈的三种方法
2020/12/19 Python
基于HTML5 的人脸识别活体认证的实现方法
2016/06/22 HTML / CSS
标记环介质访问控制协议
2016/03/27 面试题
作文批改评语大全
2014/04/23 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
2016年优秀班主任先进事迹材料
2016/02/26 职场文书
python_tkinter弹出对话框创建
2022/03/20 Python
python区块链实现简版工作量证明
2022/05/25 Python