js数据结构 --栈

栈结构

是一个受限的线性表,后进先出

其显示是仅仅允许在表的一段进行插入和删除,可操作的一端叫栈顶,另一端称为栈底。

栈的应用

比如函数调用栈

当a调用了b,b调用了c

在这个执行过程中,先将a压入栈底,a没有执行完不会弹出,a执行中,调用了b,再将b压入栈底,

执行b时,有调用了c,就将c压入栈底,

c执行完之后,出栈,再执行b,执行完之后,b再出栈,再执行a,a执行完之后,出栈

面试题目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Zv0WQ5s-1646307629120)(C:\Users\Wlijun\AppData\Roaming\Typora\typora-user-images\image-20220225233246505.png)]

c

栈的操作

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

栈结构的实现

基于数组实现

// 封装栈类
function Stack(){
    //栈的属性
    this.items=[]
    // 栈的操作
    //1,将元素压入栈底
   Stack.prototype.push = function(elelment){
       return this.items.push(element)
   }
    //2,从栈中取出元素
    Stack.prototype.pop = function(){
       return this.items.pop()
   }
    //3,查看栈顶元素
     Stack.prototype.peek = function(){
       return this.items[this.item.length - 1]
   }
    //4,判断栈是否为空
     Stack.prototype.isEmpty = function(){
       return this.items.length === 0
   }
    // 5,获取栈中元素的个数
     Stack.prototype.size = function(){
       return this.items.length
   }
    //6, toString 方法
      Stack.prototype.toString = () => {
        //希望输出的形式:20 10 12 8 7
        let resultString = ''
        for (let i of this.items){
          resultString += i + ' '
        }
        return resultString
      }
}

//栈的使用
const s = new Stack()

例子

 // 十进制转成二进制
        function fn(num) {
            // 定义栈对象
            let stack = new Stack()
            console.log(typeof num)
            // if (typeof num !== 'number') return null
            while (num > 0) {
                stack.push(num % 2)
                num = Math.floor(num / 2)
            }
            // 从栈中取出数据
            var numStr = ''
            while (!stack.isEmpty()) {
                numStr += stack.pop()
            }
            return numStr
        }
        // 测试
        console.log(fn(100))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值