come on 伸出手指戳戳上方关注我哦
一、栈的几个概念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为止 10进制转二进制是1010,最后所得的余数先占位,符合栈的定义。 思考:栈在实际生活中还有哪些运用?
References书名:学习JavaScript数据结构与算法(第3版)作者:[巴西]洛伊安妮·格罗纳
https://zhuanlan.zhihu.com/p/164683703
◆ ◆ ◆
thinking个人小观点:读书的最重要的是体悟,如果你读了很多书思想和书本上一模一样那说明没有体悟 ,你的所看所想要结合真实的生活,虽然说读的多了,量变会引起质变,在没有引起质变之前的阅读,都只是在获取咨询,和每天刷短视频的本质是一样的,获取信息的阅读和增进理解力的阅读还是有很大区别的。
个人观点,不认同可以私信侃一下哦
END
下一篇:JS版数据结构-集合
推荐阅读:1. JS. 类
2. JS. 构造函数
关注有惊喜