[zz]栈和队列,双端队列

来源:互联网 发布:食物热量计算器软件 编辑:程序博客网 时间:2024/04/19 02:06
队列

只允许访问一个数据项:即最后插入的数据项,移除这个数据项后才能访问倒数第二个插入的数据项,依此类推。

[Java示例代码]

的效率
数据项入和出的时间复杂度都为常数O(1)。这也就是说,操作所耗的时间不依赖于中数据项的个数,因此操作时间很短。不需要比较和移动操作。

队列
队列有点类似,只是在队列中第一个插入的数据项会最先被移除(先进先出,FIFO),而在中,最后插入的数据项最先移除(LIFO)。队列一样也被用作程序员的工具。它也可以用于模拟真实世界的环境,例如模拟人们在银行里排队等待,或者因特网上数据包等待传送。

[Java示例]

环绕式处理
为了避免队列不满却不能插入新数据项的问题,可以让队头队尾指针绕回到数组开始的位置,这就是循环队列,有时也称为缓冲环。

队列的效率
一样,队列中插入数据项和移除数据项的时间复杂度均为O(1)。

双端队列
双端队列就是一个两端都是结尾的队列队列的每一瑞都可以插入数据项和移除数据项。这些方法可以叫作insertLeft()和insertRight(),以及removeLeft()和removeRight()。如果严格禁止调用insertLeft()和removeLeft()方法(或禁用右段的操作),双端队列功能就和一样。禁止调用insertLeft()和removeRight()(或相反的另一对方法),它的功能就和队列一样了。双端队列队列相比,是一种多用途的数据结构,在容器类库中有时会用双端队列来提供队列两种功能。
 
原创粉丝点击