创建一个基于JavaScript对象的stack类
date
Mar 12, 2023
slug
js-stack-object
status
Published
tags
JavaScript数据结构与算法
stack
JavaScript
summary
JavaScript stack with Object
type
Post
创建一个基于 JavaScript 对象的 Stack 类
声明一个Stack类,使用 count 属性来记录栈的大小
class Stack{
constructor(){
this.count = 0;
this.items = {};
}
}
向栈中插入元素
由于 item 是一个对象,所以使用 push 方法只允许一次插入一个元素。
在js中,对象是一系列键值对的集合。要向栈中添加元素,使用 count 变量作为 item 对象的键名,插入的元素则是它的值。在向栈插入元素后,递增 count 变量。
push(element){
this.items[this.count] = element;
this.count ++;
}
例如:插入元素5和8
const stack = new Stack();
stack.push(5);
stack.push(8);
在内部, item 包含的值和 count 属性如下:
items = {
0:5,
1:8,
}
count = 2;
验证一个栈是否为空和它的大小
count
属性也表示栈的大小,可以返回count
属性的值来实现size
方法。size(){
return this.count;
}
验证栈是否为空
isEmpty(){
return this.count === 0;
}
从栈中弹出元素
由于没有使用数组存储元素,所以需要手动实现移除元素,pop方法同样返回从栈中移除的元素,实现如下:
pop(){
if(this.isEmpty()){
return undefined;
}
this.count --;
const result = this.items[this.count];
delete this.items[this.count];
return result;
}
首先,检验栈是否为空。如果为空,就返回 undefined。如果栈不为空的话,我们会将 count 属性减 1,并保存栈顶的值,以便在删除它之后将它返回。
我们使用如下内部的值来模拟 pop 操作。
items = {
0:5,
1:8
};
count = 2;
要访问到栈顶的元素(即最后添加的元素 8),我们需要访问键值为 1 的位置。因此我们将 count 变量从 2 减为 1。这样就可以访问 items[1],删除它,并将它的值返回了。
查看栈顶的值并将栈清空
使用 peek 方法查看栈顶元素
peek(){
if(this.isEmpty()){
return undefined;
}
return this.items[this.count - 1];
}
清空栈
方式一:
clear(){
this.item = {};
this.count = 0;
}
方式二:
while(!this.isEmpty()){
this.pop();
}