JS数据结构(2)——栈

JS数据结构(2)——栈

栈(stack)是一种** LIFO(Last-In-First-Out,后进先出)** 的数据结构。

它是一种受限的线性表,它的限制是仅允许在表的一端进行插入和删除运算,这一端就被称为栈顶,另外一端就是栈底

向一个栈添加一个新元素叫做进栈、入栈或者压栈,它是把新元素放到栈顶元素的上面,成为新的栈顶元素。
从一个栈中删除元素叫做出栈或者退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

栈的结构:

在这里插入图片描述

创建栈
function Stack(){
  this.items = [];//栈中的属性
  // 入栈
  Stack.prototype.push = function (element) {
    this.items.push(element);
  }
  // 出栈
  Stack.prototype.pop = function () {
    return this.items.pop();
  }
  // 查看栈顶元素
  Stack.prototype.peak = function () {
    return this.items[this.items.length - 1];
  }
  // 判断栈是否为空
  Stack.prototype.isEmpty = function () {
    return this.items.length == 0;
  }
  // 查看栈中元素个数
  Stack.prototype.size = function () {
    return this.items.length;
  }
  // 把栈内元素以字符串的形式返回
  Stack.prototype.toString = function () {
    var result = '';
    for(var i = 0; i<this.items.length; i++)
      result += this.items[i];
    return result;
  }
}
栈的使用
var s = new Stack();
s.push(10);
s.push(20);
s.push(30);
s.push(100);
console.log(s);      	//结果为:Stack{ items: [10, 20, 30, 100]}

console.log(s.pop());   // 结果为:100
console.log(s.pop());	// 结果为:30
console.log(s);			// 结果为: Stack{ items: [10, 20]}
console.log(s.isEmpty());	// 结果为:false
console.log(s.peak());		// 结果为: 20
console.log(s);				// 结果为: Stack{ items: [10,20]}
console.log(s.toString());	// 结果为: 10 20

栈的应用

十进制转换为二进制:

function dec2bin(decNumber) {
  var s = new Stack();
  while (decNumber > 0){
    s.push(decNumber % 2);
    decNumber = Math.floor(decNumber / 2);
  }
  var binString = '';
  while(!s.isEmpty()) {
    binString += s.pop();
  }
  return binString;
}
console.log(dec2bin(100));
结果输出为:1100100
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值