学习Javascript数据结构与算法系列笔记(二):栈

本文介绍了栈这一数据结构的概念,遵循后进先出的原则,并详细解释了如何使用JavaScript实现栈的各种操作,如添加、移除元素及转换十进制数到不同进制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

栈是一种遵从后进先出(lifo)原则的有序集合。新添加的或待删除的元素都保存在栈的末尾,称作栈顶,顶一端叫做栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。

栈也被用在编程语言的编译器和内存中保存变量、方法调用等。

1.栈的创建

声明类

function Stack(){
  //Declarations of various properties and functions
}

选择一种数据结构来保存栈里的元素—–数组

var items = [];

为栈声明一些方法

  • push(ele): 添加一个(或几个)新元素到栈顶。

  • pop(): 移除栈顶的元素,同时返回被移除的元素。

  • peek(): 返回栈顶的元素。

  • isEmpty(): 如果栈为空则返回true,反之返回false。

  • clear(): 移除栈里的所有元素。

  • size(): 返回栈里的元素个数。

完整代码

function Stack(){
  var items = [];
  //add new elements to stackTop
  this.push = function(ele){
    items.push(ele);
  };
  //remove elements of stackTop and return this elements
  this.pop = function(){
    return items.pop();
  };
  //return elements of stackTop
  this.peek = function(){
    return items[items.length - 1];
  };
  //judge the stack is empty
  this.isEmpty = function(){
    return items.length == 0;
  };
  //clear the stack
  this.clear = function(){
    items = [];
  };
  //return the stack's length
  this.size = function(){
    return item.length;
  };
  //console
  this.print = function(){
    console.log(items.toString);
  };
}

使用Stack类

  • 初始化

  • 判断是否为空

  • 添加元素

  • 调用peek方法

  • 调用size方法

  • 输出stack

var stack = new Stack();
console.log(stack.isEmpty()); //true
stack.push(5);
stack.push(8);
console.log(stack.peek()); //8
stack.push(11);
console.log(stack.size()); //3
console.log(stack.isEmpty()); //false
stack.push(15);
stack.pop();
stack.pop();
console.log(stack.size()); //2
stack.print(); //[5, 8]

2.从十进制到二进制

function divideBy2(decNumber) {
  var remStack = new Stack(),
  rem,
  binaryString = '';
  while (decNumber > 0) { 
    rem = Math.floor(decNumber % 2); 
    remStack.push(rem); 
    decNumber = Math.floor(decNumber / 2); 
  }
  while (!remStack.isEmpty()) { 
    binaryString += remStack.pop().toString();
  }
  return binaryString;
}

在这段代码里,当结果满足和2做整除的条件时,我们会获得当前结果和2的余数,放到栈里。然后让结果和2做整除。另外请注意: JavaScript有数字类型,但是它不会区分究竟是整数还是浮点数。因此,要使用Math.floor函数让除法的操作仅返回整数部分。最后,用pop方法把栈中的元素都移除,把出栈的元素变成连接成字符串。

修改上述代码,改为10进制与任一进制转换

function baseConverter(decNumber, base) {
  var remStack = new Stack(),
  rem,
  digits = '0123456789ABCDEF'; //数字转换 取索引值
  baseString = '';
  while (decNumber > 0) { 
    rem = Math.floor(decNumber % base); 
    remStack.push(rem); 
    decNumber = Math.floor(decNumber / base); 
  }
  while (!remStack.isEmpty()) { 
    binaryString += digits[remStack.pop()];
  }
  return binaryString;
}

栈章节结束~~ヾ(◍°∇°◍)ノ゙

下一节队列~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值