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 相关文章推荐
jQuery学习2 选择器的使用说明
Feb 07 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
Jul 21 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
Dec 08 Javascript
jQuery取得iframe中元素的常用方法详解
Jan 14 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
Sep 22 jQuery
基于jQuery的$.getScript方法去加载javaScript文档解析
Nov 08 jQuery
VUE2.0中Jsonp的使用方法
May 22 Javascript
详解使用mpvue开发github小程序总结
Jul 25 Javascript
jquery实现的分页显示功能示例
Aug 23 jQuery
微信小程序 简易计算器实现代码实例
Sep 02 Javascript
JavaScript实现简单动态表格
Dec 02 Javascript
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 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中查询SQL Server或Sybase时TEXT字段被截断的解决方法
2009/03/10 PHP
php判断页面是否是微信打开的示例(微信打开网页)
2014/04/25 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
2014/07/04 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
2016/09/11 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
参考:关于Javascript中实现暂停的几篇文章
2007/03/04 Javascript
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
基于jquery点击自以外任意处,关闭自身的代码
2012/02/10 Javascript
node.js中的http.get方法使用说明
2014/12/14 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
Node.js Addons翻译(C/C++扩展)
2016/06/12 Javascript
Vue.js每天必学之Class与样式绑定
2016/09/05 Javascript
使用 bootstrap modal遇到的问题小结
2016/11/09 Javascript
laydate.js日期时间选择插件
2017/01/04 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
关于js中的鼠标事件总结
2017/07/11 Javascript
vue Element-ui input 远程搜索与修改建议显示模版的示例代码
2017/10/19 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
vuex实现购物车功能
2020/06/28 Javascript
python ElementTree 基本读操作示例
2009/04/09 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
python学生信息管理系统实现代码
2019/12/17 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
django创建css文件夹的具体方法
2020/07/31 Python
泰国第一的化妆品网站:Konvy
2018/02/25 全球购物
淘宝活动策划方案
2014/02/06 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
领导班子四风对照检查材料
2014/09/23 职场文书
教师四风问题整改措施
2014/09/25 职场文书
2014年人事行政工作总结
2014/12/03 职场文书
高中政治教师教学反思
2016/02/23 职场文书
2019个人工作总结
2019/06/21 职场文书