1.1 数组构建环形队列
数组构建环形队列首先要搞清楚几个点:
对于环形队列,这个队列的空间可以重复使用,即只要队列还有空间就可以向队列中插入数据
环形队列重要算法----------------取模运算
明确环形队列中能存储数据的长度为队列长度-1
注意:这里的队列有效长度为存储长度-1意思并不是指的数组最后一个下标元素不能存放数据,而是指的是在整个队列中始终只能存放4个元素,因为循环队列中设置的判断队列是否满的条件是:(rear + 1)% maxLength == head
至于为什么要用队列长度-1作为有效存储数据长度我思考了一下,感觉是为了后面更方便的判断队列是否已满:
rear表示队列尾部:指向当前插入数据末尾的后一个位置,初始状态指向0
head表示队列头部:指向当前插入数据的头,出示状态指向0
maxLength表示数组长度
因为判断队列是否已满是通过判断(rear+1)% maxLength == head 进行判断的, 不能忘记rear是指向尾部元素后一个位置的
当时我也会想这个rear+1的问题,如果将对列有效长度直接等于数组长度,那么判断对列已满就可以变成rear % maxLength,
仔细一想问题挺大,rear在head后面还行,但是当rear跑到head前面时就错误大大滴。
搞清楚队列中的有效数据
有效数据为队列中数据的个数:(rear-head+maxLength)% maxLength
这里赘述一下为什么要采用这种取模的方式:我第一感觉 就是求有效长度直接用尾部rear - 头部head不就可以了吗,但是我忽略了一点
那就是这个尾部rear可以跑到头部的前面啊,因为这是一个环形队列,当有数据弹出时,队列前面的位置就空出来了,此时如果再想插入数据就必须把尾部移到队列前面去。别忘了队列的特点是先进先出啊