base是数组,数组是队列的元素类型
入队,放在数组下标为尾指针rear的,如果我们定义了队列Q的话,我们在rear这里加上Q,变成Q.rear.即插入的元素放在尾指针所指的位置,然后尾指针指向下一块空间,rear++
出队时为删除元素,只能从头开始,然后头指针再往后移。
如何操作?
将我们当前头指针所指的数组元素base[front]存放在某个变量x当中,这是我们要出队的元素,然后头指针++:front++;
j3出队后,t头指针和尾指针相等,队空
下标为0到MAXSIZE-1,不能再入队了,数组下标不能再加一了
存在问题:真假溢出
怎么办?让他重新回到0的位置,反复利用空间
就像下标为0的位置接在下标为5的位置
怎么实现?取余运算
举个例子
将元素放在尾指针所指的位置Q.base[Q.rear]=x,然后尾指针加1:Q.rear+1,只要他加完了以后打到MAXQSIZE,她就可以回到0了
删除元素的时候也是表头来删除,s.front是下标,所以我们将表头指针所指的元素Q.base[s.front]赋值给某个变量,这就是我们要删除的元素的值
然后头指针后移,怎么后移?也是加1,Q.front+1
头指针达到最大值也让他回到0,所以取余运算
所以就可以画一个图,6个存储空间,接在一起
还有一个问题:判断队空和队满的问题
这里假设存储了3个元素,这里j6出队后,front也指到1号位置,这时两指针相等
如果是又三个元素入队尾,尾指针不断往后移,j9入队后,尾指针也指向了front的位置
怎么解决?对比之前栈空和栈满的情况
我们有3个方案
1.另设一个标志
2.另设一个变量count,来记录元素的个数
3.少用一个空间(常用考研等:两指针一样,怎么区别队空和队满)
一开始队空,两指针相等
队满:尾指针再加一,就和头一样了,此时两指针不重合
尾指针再加一,除以MAXQSIZE,取余数,如果与头指针重合,这时就是队满