js arraybuffer转string_JS版数据结构栈

come on 35055318f0d5fe78491a1c33498c10e6.gif 伸出手指戳戳上方关注我哦

一、栈的几个概念

01. LIFO原则

LIFO即Last In First Out 。栈,是一个后进先出的数据结构。

JavaScript没有栈这个数据结构,我们用js模拟栈,给数组stackArray 添加元素a和b,然后再依次移除元素,最后添加的元素b,是最先被移除。

const stackArray = []stackArray.push('a')stackArray.push('b')const item1 = stackArray.pop()console.log(item1) // bconst item2 = stackArray.pop()console.log(item2) // a

02. 栈顶和栈底

新添加或待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底。

二、栈和js中的基本数据类型

js中的数据类型分为基本类型和引用类型

基本类型:undefined、null、boolean、number、string、bigint、symbol

引用类型:object(Array Object)

基本类型是保存在栈内,是值引用,而引用类型保存在堆内存中,是地址引用。

01. 基本数据类型是值引用

比如:基本变量a和b,a的值复制给b,如果a的值改变,b的值是不变的

var a = 'tony';var b = a; // 此时 a = b = tonya = 'mary';console.log(a) // maryconsole.log(b) // tony

02. 引用类型是地址引用

对象a和b,a对象复制给b,如果修改a的name值,b的name值也会改变。

var a = { name: 'zhangsan'}var b = a;a.name = 'lisi';console.log(a.name)  // lisiconsole.log(b.name) // lisi

03. 创建一个JS的stack类

Stack要实现的方法有:

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

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

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

isEmpty():判断栈里是否有元素。

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

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

class Stack {    constructor(){        this.items = []    }    push(ele){      this.items.push(ele)    }    pop(){        return this.items.pop()    }    peek(){        return this.items[this.items.length-1]    }    isEmpty(){        return this.items.length === 0    }    clear(){        this.items = []    }    size(){       return this.items.length    }}

new初始化Stack类:

const stack = new Stack()stack.push(1)stack.push(2)console.log(stack) // Stack {items: Array(2)}stack.pop()console.log(stack) // Stack {items: Array(1)}stack.peek()console.log(stack) // Stack {items: Array(1)} items: [1]stack.isEmpty()console.log(stack) // Stack {items: Array(1)}stack.clear()console.log(stack) // Stack {items: Array(0)}stack.size()console.log(stack)// Stack {items: Array(0)}
三、栈的实际应用

01. 十进制转化成二进制

十进制转二进制:十进制数除以2,并对商取整,直到结果是0为止

d2416c5fa64dce79e183dd270a70908a.png

10进制转二进制是1010,最后所得的余数先占位,符合栈的定义。 思考:

栈在实际生活中还有哪些运用?

References

书名:学习JavaScript数据结构与算法(第3版)作者:[巴西]洛伊安妮·格罗纳

https://zhuanlan.zhihu.com/p/164683703

 ◆ ◆

883bdf22a9f5e8d609331a8aabfab297.png  thinking

      个人小观点:读书的最重要的是体悟,如果你读了很多书思想和书本上一模一样那说明没有体悟 ,你的所看所想要结合真实的生活,虽然说读的多了,量变会引起质变,在没有引起质变之前的阅读,都只是在获取咨询,和每天刷短视频的本质是一样的,获取信息的阅读和增进理解力的阅读还是有很大区别的。

个人观点,不认同可以私信侃一下哦

END

下一篇:JS版数据结构-集合

推荐阅读:

1. JS. 类

2. JS. 构造函数

a2edc1c45ba16323006841a7482171bb.png

关注有惊喜

649dc939fb4d6ef7958ae8621176cb76.png

e9d650cb9cee8d100508614d27768f1d.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值