在JavaScript中的栈数据结构(Stack )

这篇具有很好参考价值的文章主要介绍了在JavaScript中的栈数据结构(Stack )。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在JavaScript中的栈数据结构(Stack )


导文

JavaScript 中可以通过数组实现栈数据结构。栈是一种遵循后进先出(LIFO)原则的数据结构,它只允许在栈顶进行插入和删除操作。

什么是Stack 类?

栈是一种遵从后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的
同一端,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。
注:LIFO:last in first out
图例:
在JavaScript中的栈数据结构(Stack )
在JavaScript中的栈数据结构(Stack )

如何创建一个Stack

先将创建一个类来表示栈。先声明这个类:

function Stack() { 
 //各种属性和方法的声明
} 

选择一种数据结构来保存栈里的元素。可以选择数组:

function Stack() { 
  //保存栈里的元素
  let items = []; 
 //各种属性和方法的声明
} 


如何修改Stack中的值

栈声明方法举例

  • push(element(s)):添加一个(或几个)新元素到栈顶。
  • pop():移除栈顶的元素,同时返回被移除的元素。
  • peek():返回栈顶的元素,不对栈做任何修改(这个方法不会移除栈顶的元素,仅仅返
    回它)。
  • isEmpty():如果栈里没有任何元素就返回true,否则返回false。
  • clear():移除栈里的所有元素。
  • size():返回栈里的元素个数。这个方法和数组的length属性很类似。

添加

实现添加的可以使用push。这个方法负责往栈里添加新元素,有一点很重要:该方法只添加元素到栈顶,也就是栈的末尾。
push方法可以这样写:

this.push = function(element){ 
 items.push(element); 
}; 

整体函数:

function Stack() { 
  //保存栈里的元素
  let items = []; 
   //添加新元素
  this.push = function(element){ 
   items.push(element); 
 }; 
 //各种属性和方法的声明
} 

移除

接着来实现移除,主要用来移除栈里的元素,使用的是pop方法。
栈遵从LIFO原则,因此移出的是最后添加进去的元素。
栈的pop方法可以这样写:

this.pop = function(){ 
 return items.pop(); 
}; 

整体函数:

function Stack() { 
  //保存栈里的元素
  let items = []; 
   //添加新元素
  this.push = function(element){ 
   items.push(element); 
  }; 
  //移除元素
 this.pop = function(){ 
  return items.pop(); 
 }; 
 //各种属性和方法的声明
} 

查看

查看栈顶元素

因为栈顶就是最后进入的元素,类内部是用数组保存元素的,所以访问数组的最后一个元素可以用 length - 1。
图例:
在JavaScript中的栈数据结构(Stack )

所以,如果想知道栈里最后添加的元素是什么,可以用peek方法。这个方法将返回栈顶的元素:

this.peek = function(){ 
 return items[items.length-1]; 
}; 
检查栈是否为空

可以直接使用length == 0判断,如果栈为空的话将返回true,否则就返回false:

this.isEmpty = function(){ 
 return items.length == 0; 
}; 
检查栈的长度

类似于数组的length属性,我们也能实现栈的length。对于集合,最好用size代替length。
因为栈的内部使用数组保存元素,所以能简单地返回栈的长度:

this.size = function(){ 
 return items.length; 
};

整体函数:

function Stack() { 
  //保存栈里的元素
  let items = []; 
   //添加新元素
  this.push = function(element){ 
   items.push(element); 
  }; 
  //移除元素
 this.pop = function(){ 
  return items.pop(); 
 }; 
 //查看栈顶元素
 this.peek = function(){ 
   return items[items.length-1]; 
 }; 
 //检查栈是否为空
 this.isEmpty = function(){ 
   return items.length == 0; 
 }; 
 //检查栈的长度
 this.size = function(){ 
   return items.length; 
 };
 //各种属性和方法的声明
} 

清空栈元素

clear方法用来移除栈里所有的元素,把栈清空。实现这个方法最简单的方式是:

this.clear = function(){ 
 items = []; 
}; 

另外也可以多次调用pop方法,把数组中的元素全部移除,这样也能实现clear方法。

打印栈元素

为了检查栈里的内容,实现一个辅助方法print。把栈里的元素都输出到控制台:

this.print = function(){ 
 console.log(items.toString()); 
}; 

完整的Stack函数:

function Stack() { 
  //保存栈里的元素
  let items = []; 
   //添加新元素
  this.push = function(element){ 
   items.push(element); 
  }; 
  //移除元素
 this.pop = function(){ 
  return items.pop(); 
 }; 
 //查看栈顶元素
 this.peek = function(){ 
   return items[items.length-1]; 
 }; 
 //检查栈是否为空
 this.isEmpty = function(){ 
   return items.length == 0; 
 }; 
 //检查栈的长度
 this.size = function(){ 
   return items.length; 
 };
 //清空栈元素
 this.clear = function(){ 
  items = []; 
 }; 
 // 打印栈元素
 this.print = function(){ 
  console.log(items.toString()); 
 }; 
} 

这样,我们就完整创建了栈!


创建Stack的其他方法-用 ES6 语法声明 Stack 类

class Stack { 
 constructor () { 
 this.items = []; //{1} 
 } 
 push(element){ 
 this.items.push(element); 
 } 
 //其他方法
}

使用Stack类

先初始化Stack类。再验证一下栈是否为空(输出是true,因为还没有往
栈里添加元素)。

let stack = new Stack(); 
console.log(stack.isEmpty()); //输出为true 

往栈里添加一些元素(这里我们添加数字1和2):

stack.push(1); 
stack.push(2); 

如果调用peek方法,将会输出2,因为它是往栈里添加的最后一个元素:

console.log(stack.peek()); //输出2

再添加一个元素:

stack.push(11); 
console.log(stack.size()); //输出3 
console.log(stack.isEmpty()); //输出false 

往栈里添加了11。如果调用size方法,输出为3,因为栈里有三个元素(1、2和11)。
再调用isEmpty方法,会看到输出了false。因为栈里有三个元素,不是空栈。

console.log(stack.isEmpty()); //输出为false

然后,调用两次pop方法从栈里移除1个元素:

stack.pop(); 
console.log(stack.size()); //输出2 
stack.print(); //输出[1, 2] 

在 JavaScript 中使用栈数据结构的好处

实现递归调用:函数调用过程中,每次函数调用都会将新的函数帧(frame)压入栈中,待函数返回时再从栈中弹出。这就是递归调用所依赖的栈结构。
实现浏览器的前进后退功能:浏览器的前进后退功能依赖于两个栈,分别用来维护已经访问过的网页和下一个要访问的网页;用户点击“后退”时,将当前网页从已访问网页的栈中弹出,并将其压入下一个要访问的网页栈中。
对表达式求值:使用栈可以方便地对表达式进行求值,例如判断表达式中括号是否匹配、转换中缀表达式为后缀表达式等。
实现回溯算法:在搜索算法中,一般使用栈数据结构来保存路径信息,当搜索到某一层无解时,直接从栈中弹出该状态并回溯到上一层。文章来源地址https://www.toymoban.com/news/detail-499286.html

到了这里,关于在JavaScript中的栈数据结构(Stack )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在JavaScript中的数据结构(队列)

    当我们在浏览器中打开新标签时,就会创建一个 任务队列 。这是因为每个标签都是单线程处 理所有的任务,它被称为 事件循环 。浏览器要负责多个任务,如渲染HTML,执行JavaScript代码,处理用户交互(用户输入、鼠标点击等),执行和处理异步请求。 队列(Queue) 是一种具有

    2024年02月09日
    浏览(32)
  • 【数据结构】我家三岁表弟都明白的栈和队列,你不会不了解吧?

    🧑‍💻作者: @情话0.0 📝专栏:《数据结构》 👦个人简介:一名双非编程菜鸟,在这里分享自己的编程学习笔记,欢迎大家的指正与点赞,谢谢!   栈是只允许在一端进行插入或删除操作的线性表。首先栈是一种线性表,但是对其限定该线性表只能在某一端进行插入或

    2024年01月24日
    浏览(28)
  • 头歌(C语言)-数据结构与算法-栈的实现-第1关:实现一个顺序存储的栈

    任务描述 相关知识 栈的基本概念 栈结构的定义(C) 顺序栈的操作 编程要求 测试说明 任务描述 本关任务是实现 step1/SeqStack.cpp 中的 SS_IsFull 、 SS_IsEmpty 、 SS_Length 、 SS_Push 和 SS_Pop 五个操作函数,以实现判断栈是否为满、是否为空、求栈元素个数、进栈和出栈等功能。 相关

    2024年02月07日
    浏览(47)
  • 【C++初阶10-stack&queue】STL中的栈和队列(附优先级队列

    本期分享:STL中的栈和队列。 在数据结构初阶时,我们已经学习这来那个两种数据结构,如今来看STL中的,不过是更加标准化。而实现起来,会简单得超乎你想象! 文中不足错漏之处望请斧正! STL中的栈和队列是容器适配器。容器适配器是对某种已有容器的再次封装。 比如

    2024年02月06日
    浏览(33)
  • 【JavaScript数据结构与算法】字符串类(反转字符串中的单词)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端(Node.js) 📃 个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀 未来打算: 为中国的工业软件事业效力 n 年 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目

    2023年04月09日
    浏览(77)
  • 数据结构---栈(Stack)

    栈是一种 线性 数据结构 栈是\\\" 后进先出 (LIFO---Last In First Out)\\\"的数据结构(盘子的叠放:当服务员将新的盘子放在餐桌上时,他们通常会将盘子放在已有的盘子堆的顶部。当顾客用完盘子后,服务员会从堆顶取走盘子。这个过程就类似于栈的入栈和出栈操作。) 规定只能从 栈顶

    2024年01月21日
    浏览(30)
  • 数据结构——栈(Stack)

    目录 1.栈的介绍 2.栈工程 2.1 栈的定义 2.1.1 单链表实现栈 2.1.2 数组实现栈 2.1.2.1 静态数组栈 2.1.2.2 动态数组栈 2.2 栈的函数接口 2.2.1 栈的初始化 2.2.2 栈的数据插入(入栈) 2.2.3 栈的数据删除(出栈) 2.2.4 判断栈是否为空 2.2.5 取栈顶数据 2.2.6 栈数据统计 2.2.7 栈销毁 3. 栈总

    2024年01月21日
    浏览(33)
  • 【数据结构】栈(Stack)实现详解

    🚩 纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:数据结构 🔥该文章主要了解实现栈的相关操作。  栈是一种特殊的线性表,其只允许在 固定的一端 进行插入和删除元素操作。 进行数据插入和删除操作的一端称为栈顶,另一端称为栈底 。栈中的数据元

    2024年02月08日
    浏览(31)
  • 【数据结构】栈(Stack)的实现 -- 详解

    1、概念 栈 :一种特殊的线性表,其只允许在表尾进行插入和删除元素操作。 进行数据插入和删除操作的一端称为栈顶,另一端称为栈底 。栈中的数据元素遵守后进先出 LIFO(Last In First Out)的原则。 压栈 :栈的插入操作叫做进栈 / 压栈 / 入栈, 入数据在栈顶 。 出栈 :栈

    2024年02月14日
    浏览(33)
  • [数据结构 -- C语言] 栈(Stack)

    目录 1、栈 1.1 栈的概念及结构 2、栈的实现 2.1 接口 3、接口的实现 3.1 初始化 3.2 入栈/压栈 3.3 出栈 3.4 获取栈顶元素 3.5 获取栈中有效元素个数 3.6.1 bool 类型接口 3.6.2 int 类型接口 3.7 销毁栈 4、完整代码 5、功能测试 栈:一种特殊的线性表,其只允许在固定的一端进行插入和

    2024年02月05日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包