JavaScript 模拟实现栈(Stack)

,数据结构的一种,它遵循后进先出(Last in, First out,LIFO)的原则。

比喻成一个类似乒乓球桶的容器比较容易理解,桶的底部是封口的,顶部是开口的,桶的横切面刚好容纳一个乒乓球的直径,也就是放入第一个乒乓球后,再放第二个乒乓球势必压在第一个球的正上方。

  • 最先入栈的 球1 在乒乓球桶的最底部(栈底)。
  • 最后入栈的 球4 在乒乓球桶的最顶部(栈顶)。
  • 球4 入栈后,若要从栈中取乒乓球,最先取到的一定是 球4
  • 要从栈中取到 球1,需要先取出 球1 上面的所有球,最后才能取到 球1

JavaScript 中的函数调用栈就是数据结构,在此不过多讨论。现在我们要用模拟实现一个数据结构。

分析
  • 使用面向对象实现,首先需要写一个 Stack 构造函数。
  • Stack 内部需要有个数组 items 存储栈中所有元素。
  • 需要有个往栈中新增元素的方法 push
  • 还要有个移除元素的方法,因为移除元素一定是最顶端的元素,对应数组的 pop 方法,所以同样取名 pop
编写 Stack 构造函数:
function Stack(){
  this.items = [];
}
添加 push 方法:
Stack.prototype.push = function(item){
  this.items.push(item);
}
添加 pop 方法:
Stack.prototype.pop = function(){
  this.items.pop();
}
可以给 Stack 类添加一些常用方法,比如:
查看栈顶元素的 getTop 方法:
Stack.prototype.getTop = function(){
  return this.items[this.items.length-1];
}
查看栈元素个数的 size 方法:
Stack.prototype.size = function(){
  return this.items.length;
}
清空栈的 clear 方法:
Stack.prototype.clear = function(){
  this.items = [];
}
打印栈的 print 方法:
Stack.prototype.print = function(){
  console.log(JSON.stringify(this.items));
}
完整代码:
function Stack(limit){
  this.items = [];
}

Stack.prototype.push = function(item){
  this.items.push(item);
}

Stack.prototype.pop = function(){
  this.items.pop();
}

Stack.prototype.getTop = function(){
  return this.items[this.items.length-1];
}

Stack.prototype.size = function(){
  return this.items.length;
}

Stack.prototype.clear = function(){
  this.items = [];
}

Stack.prototype.print = function(){
  console.log(JSON.stringify(this.items));
}
创建实例并测试
var stack = new Stack(); 
// 插入一些元素
stack.push('a');
stack.push('b');
stack.push('c');
// 查看栈元素个数
console.log(stack.size()); // 3
// 获取栈顶元素
console.log(stack.getTop()); // "c"
// 打印
stack.print(); // ["a","b","c"]
// 让栈顶元素出栈
stack.pop();
// 查看栈元素个数
console.log(stack.size()); // 2
// 获取栈顶元素
console.log(stack.getTop()); // "b"
// 打印
stack.print(); // ["a","b"]

至此,模拟实现栈的代码测试完毕。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值