JavaScript数据结构之-栈 ゝ一纸荒年。 2022-05-01 12:14 135阅读 0赞 #### 栈数据结构 #### **栈** 是一种遵循 **后进先出(LIFO)** 原则的有序集合。新添加和待删除的数据都保存在栈的同一端**栈顶**,另一端就是**栈底**。新元素靠近栈顶,旧元素靠近栈底。 #### 创建一个栈 #### 我们需要自己创建一个栈,并且这个栈包含一些方法。 * push(element(s)):添加一个(或多个)新元素到栈顶 * pop():删除栈顶的元素,并返回该元素 * peek():返回栈顶的元素,不对栈做任何操作 * isEmpty():检查栈是否为空 * size():返回栈的元素个数 * clear():清空栈 function Stack() { let items = []; this.push = function(element) { items.push(element); }; this.pop = function() { let s = items.pop(); return s; }; 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 = []; } } 复制代码 但是这样的方式在创建多个实例的时候为创建多个items的副本。就不太合适了。 用ES如何6实现Stack类了。可以用WeakMap实现,并保证属性是私有的。 let Stack = (function() { const items = new WeakMap(); class Stack { constructor() { items.set(this, []); } getItems() { let s = items.get(this); return s; } push(element) { this.getItems().push(element); } pop() { return this.getItems().pop(); } peek() { return this.getItems()[this.getItems.length - 1]; } isEmpty() { return this.getItems().length == 0; } size() { return this.getItems().length; } clear() { this.getItems() = []; } } return Stack; })(); 复制代码 #### 用栈解决问题 #### 栈可以解决十进制转为二进制的问题、任意进制转换的问题、平衡园括号问题、汉罗塔问题。 // 例子十进制转二进制问题 function divideBy2(decNumber) { var remStack = new Stack(), rem, binaryString = ''; while (decNumber > 0) { rem = Math.floor(decNumber % 2); remStack.push(rem); decNumber = Math.floor(decNumber / 2); } while(!remStack.isEmpty()) { binaryString += remStack.pop().toString(); } return binaryString; } // 任意进制转换的算法 function baseConverter(decNumber, base) { var remStack = new Stack(), rem, binaryString = '', digits = '0123456789ABCDEF'; while (decNumber > 0) { rem = Math.floor(decNumber % base); remStack.push(rem); decNumber = Math.floor(decNumber / base); } while(!remStack.isEmpty()) { binaryString += digits[remStack.pop()].toString(); } return binaryString; } 复制代码 转载于:https://juejin.im/post/5cc86ae4e51d45400f5d58ae
相关 数据结构之栈 一.什么是栈? 本文将介绍一个重要的数据结构—栈,和之前讲到的链表、数组一样也是一种数据呈线性排列的数据结构,不过在这种结构中,我们只能访问最新添加的数据。栈就像是一摞书, た 入场券/ 2022年10月14日 10:49/ 0 赞/ 180 阅读
相关 数据结构:JavaScript实现栈 栈是一种特殊的列表 栈中的元素只能从列表的一端进行访问,这一端被我们称作栈顶 栈是一种后入先出(LIFO last-in-first-out)的数据结构 代码如 电玩女神/ 2022年08月20日 04:11/ 0 赞/ 211 阅读
相关 数据结构之栈 栈是一种先进后出的线性结构,只允许在一端插入删除,属于逻辑结构。 栈的定义 package com.zhiru; / 栈是一种先进后出 男娘i/ 2022年08月11日 03:27/ 0 赞/ 187 阅读
相关 数据结构之栈 1、定义:栈(stack)是限制在插入和删除只能在一个位置进行操作的一种表结构,该合位置是表的末端,称作栈顶(top),对栈的基本操作的push()进栈和pop()出栈,一般栈 ╰半夏微凉°/ 2022年08月06日 01:05/ 0 赞/ 203 阅读
相关 数据结构之栈 栈是一种数据结构,特点是先进后出。比较通俗的说那就一个容器一端是封闭的,只能是先来的后出去。 先是写一个使用数组的栈类ArrayStack. / ArraySt 秒速五厘米/ 2022年07月12日 03:43/ 0 赞/ 222 阅读
相关 数据结构之栈 头文件: using namespace std; template <class T> class MyStack { 妖狐艹你老母/ 2022年05月27日 05:39/ 0 赞/ 205 阅读
相关 数据结构之栈 一、顺序栈 1.0 理解栈 栈是一种比线性表还要简单的数据结构,因为他就是对线性表的限制后的数据结构 即 只允许在线性表的尾部进行插入和删除操作 偏执的太偏执、/ 2022年05月25日 02:37/ 0 赞/ 248 阅读
相关 数据结构之栈 什么是栈 从栈的操作特性上来看,栈是一种 “操作受限”的线性表,只允许在一端插入和删除数据,且满足先进后出、后进先出的特性。 实现一个栈 栈可以用数组或链表来实现 Bertha 。/ 2022年05月16日 14:29/ 0 赞/ 242 阅读
相关 JavaScript数据结构之-栈 栈数据结构 栈 是一种遵循 后进先出(LIFO) 原则的有序集合。新添加和待删除的数据都保存在栈的同一端栈顶,另一端就是栈底。新元素靠近栈顶,旧元素靠近栈底。 创建一 ゝ一纸荒年。/ 2022年05月01日 12:14/ 0 赞/ 136 阅读
相关 数据结构之栈 数据结构栈的相关学习: 简介 限定仅在表尾进行插入和删除操作的线性表。允许插入和删除的一端成为栈顶,另一端成为栈低,不含任何元素的栈成为空栈,栈又称为先进先出的线性表 今天药忘吃喽~/ 2022年02月05日 05:09/ 0 赞/ 290 阅读
还没有评论,来说两句吧...