判定循环队列的满与空,有三种方法,它们是[$##$],[$##$]和[$##$]。
1.设标志位法
思路:预设一个标志,tag,初值=0,每当入队成功,tag=1;每当出队成功,tag=0;那么,当front==rear && tag 则表示“在入队操作之后front=rear”,显然入队造成的f=r的原因就是满了,故 front==rear && tag 表示队列满;同理,front==rear && !tag 表示队列空。
2.预留一位法: 思路:让front指向头部之前的那一位,rear指向尾部,这样一来,实际使用空间是SIZE-1。
当front=(rear+1)%SIZE or (front==-1 && rear=SIZE-2) 的时候,说明满了(其实没有满,但是剩下的那个空间不可用)
当front==rear的时候,说明空。
3.预存长度法:思路:就是加一个变量存储长度,入队成功+1,出队成功-1,=0空,=SIZE满