循环队列
循环队列介绍
- 存在front和tail指针,当front==tail时,队列为空,当添加元素时,队列末尾指针即tail+1,而元素出队列时,则队列头指针front+1。
- 当(tail+1)%c ==front时,则队列满。实际上,对于整个队列来说,当队列满时,则实际上还剩余一个空间。
基本实现
1 | public class LoopQueue<E> implements Queue<E> { |
测试示例
1 | public class LoopQueueTest { |
输出示例
1 | Queue size = 1,length: 10 front [0] tail |
链表队列
链表队列介绍
声明两个指针,一个头指针,负责删除元素,即出队操作;一个尾指针,负责添加元素,即入队操作,其中在删除元素时直接将要删除的元素指向头指针,然后将头指针的next指针重新赋给头指针。在添加元素时,需要判断尾指针为空时,需要新声明尾指针,头指针等于尾指针,而尾指针不为空的条件下,直接声明尾指针的新的next指针,再重新声明为尾指针。
基本实现
1 | public class LinkListQueue<E> implements Queue<E>{ |
测试示例
1 | public class LinkListQueueTest { |
输出示例
1 | Queue Front: 0->NULL tail |
性能比较
与数组实现的队列以及链表实现的队列进行入队出队的性能比较。
1 |
|
结果显示
1 | LoopQueue:0.026s |
可以看出循环队列和链表实现的队列的时间复杂度较低。