JavaScript中数据结构与算法(一):栈

   这篇文章主要介绍了JavaScript中数据结构与算法(一):栈,本文讲解了栈的结构、什么是回文以及递归等内容,讲解的不错,通俗易懂,需要的朋友可以参考下

  序

  数据结构与算法JavaScript这本书算是讲解得比较浅显的,优点就是用javascript语言把常用的数据结构给描述了下,书中很多例子来源于常见的一些面试题目,算是与时俱进,业余看了下就顺便记录下来吧

  git代码下载:https://github.com/JsAaron/data_structure.git

  栈结构

  特殊的列表,栈内的元素只能通过列表的一端访问,栈顶

  后入先出(LIFO,last-in-first-out)的数据结构

  javascript提供可操作的方法, 入栈 push, 出栈 pop,但是pop会移掉栈中的数据


  实现一个栈的实现类

  底层存数数据结构采用 数组

  因为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叠加

时间: 2024-11-17 13:13:48

JavaScript中数据结构与算法(一):栈的相关文章

JavaScript中数据结构与算法(三):链表

  这篇文章主要介绍了JavaScript中数据结构与算法(三):链表,本文分别讲解了单链表与双链表以及增加节和删除节的代码实例,需要的朋友可以参考下 我们可以看到在javascript概念中的队列与栈都是一种特殊的线性表的结构,也是一种比较简单的基于数组的顺序存储结构.由于javascript的解释器针对数组都做了直接的优化,不会存在在很多编程语言中数组固定长度的问题(当数组填满后再添加就比较困难了,包括添加删除,都是需要把数组中所有的元素全部都变换位置的,javascript的的数组确实直接

JavaScript中数据结构与算法(二):队列

  这篇文章主要介绍了JavaScript中数据结构与算法(二):队列,队列是只允许在一端进行插入操作,另一个进行删除操作的线性表,队列是一种先进先出(First-In-First-Out,FIFO)的数据结构,需要的朋友可以参考下 队列是只允许在一端进行插入操作,另一个进行删除操作的线性表,队列是一种先进先出(First-In-First-Out,FIFO)的数据结构 队列在程序程序设计中用的非常的频繁,因为javascript单线程,所以导致了任何一个时间段只能执行一个任务,而且还参杂了异步

JavaScript中数据结构与算法(四):串(BF)

  这篇文章主要介绍了JavaScript中数据结构与算法(四):串(BF),串是由零个或多个字符组成的有限序列,又叫做字符串,本文着重讲解了BF(Brute Force)算法,需要的朋友可以参考下 串是由零个或多个字符组成的有限序列,又叫做字符串 串的逻辑结构和线性表很相似的,不同的是串针对是是字符集,所以在操作上与线性表还是有很大区别的.线性表更关注的是单个元素的操作CURD,串则是关注查找子串的位置,替换等操作. 当然不同的高级语言对串的基本操作都有不同的定义方法,但是总的来说操作的本质都

JavaScript中数据结构与算法(五):经典KMP算法

  这篇文章主要介绍了JavaScript中数据结构与算法(五):经典KMP算法,本文详解了KMP算法的方方面在,需要的朋友可以参考下 KMP算法和BM算法 KMP是前缀匹配和BM后缀匹配的经典算法,看得出来前缀匹配和后缀匹配的区别就仅仅在于比较的顺序不同 前缀匹配是指:模式串和母串的比较从左到右,模式串的移动也是从 左到右 后缀匹配是指:模式串和母串的的比较从右到左,模式串的移动从左到右. 通过上一章显而易见BF算法也是属于前缀的算法,不过就非常霸蛮的逐个匹配的效率自然不用提了O(mn),网上

JavaScript中数据结构与算法(一):栈_javascript技巧

序 数据结构与算法JavaScript这本书算是讲解得比较浅显的,优点就是用javascript语言把常用的数据结构给描述了下,书中很多例子来源于常见的一些面试题目,算是与时俱进,业余看了下就顺便记录下来吧 git代码下载:https://github.com/JsAaron/data_structure.git 栈结构 特殊的列表,栈内的元素只能通过列表的一端访问,栈顶 后入先出(LIFO,last-in-first-out)的数据结构 javascript提供可操作的方法, 入栈 push,

JavaScript中数据结构与算法(五):经典KMP算法_javascript技巧

KMP算法和BM算法 KMP是前缀匹配和BM后缀匹配的经典算法,看得出来前缀匹配和后缀匹配的区别就仅仅在于比较的顺序不同 前缀匹配是指:模式串和母串的比较从左到右,模式串的移动也是从 左到右 后缀匹配是指:模式串和母串的的比较从右到左,模式串的移动从左到右. 通过上一章显而易见BF算法也是属于前缀的算法,不过就非常霸蛮的逐个匹配的效率自然不用提了O(mn),网上蛋疼的KMP是讲解很多,基本都是走的高大上路线看的你也是一头雾水,我试图用自己的理解用最接地气的方式描述 KMP KMP也是一种优化版的

JavaScript中数据结构与算法(四):串(BF)_javascript技巧

串是由零个或多个字符组成的有限序列,又叫做字符串 串的逻辑结构和线性表很相似的,不同的是串针对是是字符集,所以在操作上与线性表还是有很大区别的.线性表更关注的是单个元素的操作CURD,串则是关注查找子串的位置,替换等操作. 当然不同的高级语言对串的基本操作都有不同的定义方法,但是总的来说操作的本质都是相似的.比如javascrript查找就是indexOf, 去空白就是trim,转化大小写toLowerCase/toUpperCase等等 这里主要讨论下字符串模式匹配的几种经典的算法:BF.BM

JavaScript数据结构与算法之栈详解

 这篇文章主要介绍了JavaScript数据结构与算法之栈详解,本文讲解了对栈的操作.对栈的实现实例等内容,需要的朋友可以参考下     在上一篇博客介绍了下列表,列表是最简单的一种结构,但是如果要处理一些比较复杂的结构,列表显得太简陋了,所以我们需要某种和列表类似但是更复杂的数据结构---栈.栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样操作很快,而且容易实现. 一:对栈的操作. 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端陈为栈顶.比如餐馆里面洗盘子,只能先洗

JavaScript数据结构与算法之栈与队列_基础知识

学习起因 曾经有一次在逛V2EX时,碰到这么一个帖子. 数学完全还给老师了,想学回一些基础数学,大概是高中程度的,有什么书籍推荐? 发帖的楼主大学没有高数课程,出去工作时一直在从事前端的工作.感觉到数学知识的匮乏,所以想补一补数学. 看了看帖子,感觉和我很像,因为我的专业是不开高数的,我学的也是前端.也同样感觉到了数学知识匮乏所带来的困顿.同时因为自己的数学思维实在是不怎么好,所以决定努力补习数学与计算机基础知识. 当时也有人说:"前端需要什么数据结构与算法",但是对于这个事情我有自己