JavaScript数据结构之-栈
栏目: JavaScript · 发布时间: 6年前
内容简介:栈是一种遵循我们需要自己创建一个栈,并且这个栈包含一些方法。但是这样的方式在创建多个实例的时候为创建多个items的副本。就不太合适了。 用ES如何6实现Stack类了。可以用WeakMap实现,并保证属性是私有的。
栈是一种遵循 后进先出(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; } 复制代码
以上所述就是小编给大家介绍的《JavaScript数据结构之-栈》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 数据结构 – 用于构建文件系统的数据结构?
- 荐 用Python解决数据结构与算法问题(三):线性数据结构之栈
- 数据结构和算法面试题系列-C指针、数组和结构体
- 请问二叉树等数据结构的物理存储结构是怎样的?
- 数据结构——单链表
- 常用数据结构
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Building Websites with Joomla!
H Graf / Packt Publishing / 2006-01-20 / USD 44.99
This book is a fast paced tutorial to creating a website using Joomla!. If you've never used Joomla!, or even any web content management system before, then this book will walk you through each step i......一起来看看 《Building Websites with Joomla!》 这本书的介绍吧!