javaScrip数据结构栈
作者:互联网
文章目录
栈
-
概念
栈可以在删除添加时进行更多的控制,先进后出 (LIFO) 原则的有序集合,新添加或可删除的一端叫栈顶,另一端叫栈底。
-
实现
要实现一个最简单的栈,需要先创建一个栈容器,该容器具有长度,可以用数组,对象,Map实现,还需要实现以下几个功能:
push():添加新元素到栈顶。
pop():移除栈顶的元素。
peek():返回栈顶的元素,不修改。
isEmpty():判断栈是否null。
clear():清空栈。
size():返回栈长度。
-
数组实现
class Stack { constructor() { this.items = []; // 栈容器 } push(elements) { return this.items.push(elements); } pop() { return this.items.pop(); } peek() { return this.items[this.items.length - 1]; } isEmpty() { return this.items.length === 0; } clear() { this.items = []; } size() { return this.items.length; } }
-
对象实现
在使用数组实现时,大部分方法的 时间复杂度都为O(n),即为迭代整个数组直到找到需要的元素,n 代表数组的长度,数组是一个有序集合,为保证排序有效,会占用更多内存。
class StackObj { constructor() { this.items = {}; // 栈容器 this.count = 0; // 栈当前长度 } push(elements) { if (arguments.length === 1){ this.items[this.count] = elements; } else { for (let key in arguments) { this.items[this.count] = arguments[key]; this.count++; } return this.items; } this.count++; return this.items; } pop() { if (this.isEmpty()) { return console.log('栈为空'); } this.count--; let ele = this.items[this.count]; delete this.items[this.count]; return ele; } peek() { return this.items[this.count - 1]; } isEmpty() { return this.count === 0; } clear() { this.items = {}; this.count === 0; } size() { return this.count; } } let newStackObj = new StackObj(); newStackObj.push(3,4,5); newStackObj.pop();
使用对象创建栈的方法时间复杂度都为 O(1),表示可以直接找到目标元素。
-
标签:count,return,items,pop,javaScrip,数组,push,数据结构 来源: https://blog.csdn.net/qq_44393247/article/details/117389103