【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。

个人感觉还是前一种更直观一点,毕竟后一种给人可以插队的感觉。


队列的用途,就像栈那样,可以给非线性的树、图,搞上一种特定的顺序。

通过假如到队列中,原本非线性的树、图,就可以按照队列的线性顺序遍历了。

至于如何加入到队列中,则是根据树、图各个结点的属性、各种规则了,比如先序、后序、中序时,就可以有入栈、入队列的操作。

上面初步回忆了学过的队列的简单概念,到底如何使用队列,还是到具体问题中体悟吧。

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