【JS小白】对队列的学习和思考
队列的概念
之前书本上学过一点队列,后来好久不能了,现在想想不能荒废,于是再起来学习学习。
只能想起是排队那样,先进先出,后进后出。用途可能就是任务队列、消息队列那种,虽然没搞过,但能猜的出感觉来。
能想到的操作方法:
-
进入队列
-
出队
-
长度
-
清空
然后找了个博客:https://blog.csdn.net/qq_33226029/article/details/109999670
,继续回忆队列的常用操作:
-
enqueue(item:Item)入列
-
dequeue():Item出列
-
front():Item返回第一项,由于队列是变化的,所以肯定是一个方法,不是一个属性。
-
clear()
-
size()
-
isEmpty
-
destroy,销毁队列,平时也不去管垃圾释放的,所以不去管了。
其实,有需要的话完全可以去增加需要的属性和方法,哪怕搞一个专门返回第二个元素的方法,也是可以的。
是不是也可以搞一个返回最后一个元素呢,那这队列功能可就更加变种和丰富了。就可以叫做增强队列了。
总之,平时脑子里可能要记住的是
-
入队
-
出队
-
返回第一个front()
JS表示队列
像栈那样,直接用数组表示队列,不去搞专门的引用类型。
这样是因为可能只使用了队列的一两个方法,能解决问题,把算法答案写出来就行,不用专门把整个队列的定义都写出来。
然后就是伪代码的时候可以直接使用enqueue、dequeue、front()了分析问题了。
一种是数组的0位置为队头:
var queue = []
queue.push(1)
queue.push(2)
var a = queue.shift()
console.log(a);
console.log(queue.length);
然后也可以0位置为队尾,那么入队就是unshift、出队就是pop。
个人感觉还是前一种更直观一点,毕竟后一种给人可以插队的感觉。
队列的用途,就像栈那样,可以给非线性的树、图,搞上一种特定的顺序。
通过假如到队列中,原本非线性的树、图,就可以按照队列的线性顺序遍历了。
至于如何加入到队列中,则是根据树、图各个结点的属性、各种规则了,比如先序、后序、中序时,就可以有入栈、入队列的操作。
上面初步回忆了学过的队列的简单概念,到底如何使用队列,还是到具体问题中体悟吧。