javascript数据结构和算法(js手动封装栈结构)

js手动封装栈结构

一、什么是栈结构

(1)栈的概念:

在了解栈之前我们先了解一下数组,数组是一个线性结构,在数组的任意位置可以插入和删除元素,但是有些时候为了实现某些功能,必须对任意加以限制,栈就是一种受限的线性结构

(2)栈的特点:

1.栈只允许在表的一端进行添加和删除元素,这一端被称为栈顶,另一端被称为栈底2.向一个栈中添加新元素叫做进栈、入栈或者压栈,向一个栈中删除元素叫做出栈和退栈。

二、程序中的栈结构

(1)函数调用栈 a(b(c()))

a函数中调用b函数,b函数中调用c函数,执行过程中,把a压入栈中,然后把b压入栈,最后c入栈,进栈的顺序是a->b->c,当c中函数执行完之后,c出栈,随后b出栈,最后a出栈,出栈顺序是c->b->a

(2)递归

当没有停止条件递归会导致栈溢出,因为函数不断的调用自己,函数会不断的进栈,而且函数没有执行完,所有不会出栈,这样就会造成栈溢出

三、用js手动封装栈结构

(1)栈常见的操作:
  • push() 添加一个新元素到栈顶位置。
  • pop() 移除栈顶的元素,同时返回被移除的元素。
  • peek() 返回栈顶的元素,不对栈做任何修改(该方法不会移除栈顶的元素,仅仅返回它)。
  • isEmpty() 如果栈里没有任何元素就返回 true,否则返回 false
  • size() 返回栈里的元素个数。这个方法和数组的 length 属性类似。
  • toString() 将栈结构的内容以字符串的形式返回。
  • List item

(2) 栈结构的封装
class Stack {
constructor() {
this.items = [];
}

// push(item) 压栈操作,往栈里面添加元素
push(item) {
this.items.push(item);
}

// pop() 出栈操作,从栈中取出元素,并返回取出的那个元素
pop() {
return this.items.pop();
}

// peek() 查看栈顶元素
peek() {
return this.items[this.items.length - 1];
}

// isEmpty() 判断栈是否为空
isEmpty() {
return this.items.length === 0;
}

// size() 获取栈中元素个数
size() {
return this.items.length;
}

// toString() 返回以字符串形式的栈内元素数据
toString() {
let result = “”;
for (let item of this.items) {
result += item + " ";
}
return result;
}
}


### 测试封装的栈结构

```js
// push() 测试
stack.push(10);
stack.push(20);
stack.push(30);
console.log(stack.items); //--> [10, 20, 30]

// pop() 测试
console.log(stack.pop()); //--> 30

// peek() 测试
console.log(stack.peek()); //--> 20

// isEmpty() 测试
console.log(stack.isEmpty()); //--> false

// size() 测试
console.log(stack.size()); //--> 2

// toString() 测试
console.log(stack.toString()); //--> 10 20
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值