【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定义的栈不像后端语言在定义栈时的比较基础,但是重点是学习栈的结构和解决问题的思路。


那么栈有什么样的用处呢?
复杂的、高深的,我也不懂。

仅从对栈后进先出,先进后出的感官上来看,就是栈的使用,是为了按非线性的、非随机的、但又特定的某个顺序来访问数据。

一般情况下,数组只能顺序访问或随机访问,链表只能顺序访问。
那么非线性的结构,树、图,它们如果要按某个特定顺序遍历的话,栈或许就能“规范”它们的遍历顺序了。

posted @ 2022-06-08 23:22  greencode  阅读(40)  评论(0编辑  收藏  举报