顺序队列的假溢出:
本来整个顺序队列还有空闲空间,但是后面的空间已经使用到最后了。
解决:
使用循环队列,使用队头和队尾指针循环使用数组。
对头和队尾指针的移动公式:
队头:head=(head+1)%len;
队尾:tail=(tail+1)%len;
怎么判断队列已经满,或者为空了
牺牲一个空间,tail指向的空间总为空,如果:tail==head,说明队列为空;
如果(tail+1)%len==head,则队列已经满了。
联合:
((tail+1)%len)==head?满:空;
时间复杂度
非循环队列,删除某一个元素,后面的元素需要往前移动,时间复杂度为O(n);
循环队列不需要移动,---O(1);因为只需要移动指针;
tail指针总是指向空闲的空间,等待放入元素;
循环队列的扩容
扩大容量的大小为原来队列的大小减一(tail),乘以2再加一,然后从head开始复制元素到新内存;