【JS小白】对栈的学习和思考
栈的概念
参考:https://www.jianshu.com/p/d43f726e7dce
只有一个口子,既能进入也能出来。
抛弃过去学习的记忆内容,还能想到的栈的操作一般有以下:
增加但没有返回值:push
删除并返回被删除的元素:pop
长度:size()、size、length
然后还有几个,平时总是记不住,只有用到才去想到:
-
查看栈顶元素,但不删除:peek()
-
判断是否栈空:isEmpty()
-
清空:clear()
js表示栈
简单的话,就不去封装成一个引用类型了,直接用功能强大的数组来表示栈。
var stack = [];
stack.push(1);
stack.push(2);
console.log(stack.pop());
stack = [];//clear
stack.push(3);
stack.push(4);
stack.push(5);
var len = stack.length;
var top = stack[len-1]
var empty = stack.length === 0
debugger
尽管方法、属性的名字没有统一和固定,但是功能都能相应去实现。
然后就是专门定义一个引用数据类型表示栈:
function Stack(){
this.data=[]
}
Stack.prototype={
push:........略
}
不过其内部仍然是用数组来表示。
虽然js定义的栈不像后端语言在定义栈时的比较基础,但是重点是学习栈的结构和解决问题的思路。
那么栈有什么样的用处呢?
复杂的、高深的,我也不懂。
仅从对栈后进先出,先进后出的感官上来看,就是栈的使用,是为了按非线性的、非随机的、但又特定的某个顺序来访问数据。
一般情况下,数组只能顺序访问或随机访问,链表只能顺序访问。
那么非线性的结构,树、图,它们如果要按某个特定顺序遍历的话,栈或许就能“规范”它们的遍历顺序了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!