【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定义的栈不像后端语言在定义栈时的比较基础,但是重点是学习栈的结构和解决问题的思路。
那么栈有什么样的用处呢?
复杂的、高深的,我也不懂。
仅从对栈后进先出,先进后出的感官上来看,就是栈的使用,是为了按非线性的、非随机的、但又特定的某个顺序来访问数据。
一般情况下,数组只能顺序访问或随机访问,链表只能顺序访问。
那么非线性的结构,树、图,它们如果要按某个特定顺序遍历的话,栈或许就能“规范”它们的遍历顺序了。