基于数组的栈
1 /* 2 栈是一种遵从后进先出(LIFO)原则的有序集合。新添加或待删除的元素都保存在栈的同 3 一端,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底 4 */ 5 // class Stack { 6 // constructor() { 7 // this.items = []; // {1} 8 // } 9 // // 向栈添加元素:push--只添加元素到栈顶,也就是栈的末尾。push 方法可以如下这样写。 10 // push(element) { 11 // this.items.push(element); 12 // } 13 // //从栈移除元素:pop--移出的是最后添加进去的元素,同时返回被移除的元素 14 // pop() { 15 // return this.items.pop(); 16 // } 17 // //查看栈顶元素:peep--该方法将返回栈顶的元素--如果想知道栈里最后添加的元素是什么 18 // peek() { 19 // return this.items[this.items.length - 1]; 20 // } 21 // // 检查栈是否为空:isEmpty 22 // isEmpty() { 23 // return this.items.length === 0; 24 // } 25 // // 清空栈元素:clear 26 // clear() { 27 // this.items = []; 28 // } 29 // size() { 30 // return this.items.length; 31 // } 32 // } 33 // // 清空栈元素 34 // const stack = new Stack(); 35 // console.log(stack.isEmpty()); // true 36 // // 添加元素 37 // stack.push(5); 38 // stack.push(2); 39 // console.log(stack.peek()); // 2 40 41 42 /* 43 创建一个基于 JavaScript 对象的 Stack 类 44 目的:如果数组有更多元素的话,所需的时间会更长。另外,数组是元 45 素的一个有序集合,为了保证元素排列有序,它会占用更多的内存空间。 46 如果我们能直接获取元素,占用较少的内存空间,并且仍然保证所有元素按照我们的需要排 47 列,那不是更好吗? 48 */ 49 50 class Stack { 51 constructor() { 52 this.count = 0; // 记录栈的大小 53 this.items = {}; 54 } 55 push(element) { 56 this.items[this.count] = element; 57 this.count++; 58 } 59 size() { 60 return this.count; 61 } 62 isEmpty() { 63 return this.count === 0; 64 } 65 pop() { 66 if (this.isEmpty()) { 67 return undefined; 68 } 69 this.count--; 70 const result = this.items[this.count]; 71 delete this.items[this.count]; 72 return result; 73 } 74 peek() { 75 if (this.isEmpty()) { 76 return undefined; 77 } 78 return this.items[this.count - 1]; 79 } 80 clear() { 81 this.items = {}; 82 this.count = 0; 83 } 84 toString() { 85 if(this.isEmpty()) { 86 return ''; 87 } 88 let objString = `${this.items[0]}`; 89 for(let i = 1; i < this.count; i++) { 90 objString = `${objString},${this.items[i]}` 91 } 92 return objString; 93 } 94 }