基于数组的栈

 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 }

 

posted @ 2021-06-30 15:20  小白咚  阅读(48)  评论(0编辑  收藏  举报