数组实现环形队列-获取有效数据个数
(rear-front+maxSize)%maxSize
rear | 队尾元素下标的下一个 |
---|---|
front | 队头元素的下标 |
maxSize | 队列的最大长度 |
拆解一下,
如果 队尾指针 在 队头指针 后面的时候
即 队尾指向的数组下标 在 队头指向的数组下标 之后,
size = rear - front 即 6-3=3
如果 队尾指针 在 队头指针 前面的时候
即 队尾指向的数组下标 在 队头指向的数组下标 之前,
size = rear-1 + maxSize - (front-1) 即 rear + maxSize - front
这个用数学的方式进行理解
int size; //有效队列长度
if(rear>front){
size = rear - front;
} else{
size = rear + maxSize - front
}
如果把这个分段函数写成一个函数的时候,
size = (rear-front+maxSize)%maxSize
%maxSize | 防止size大于maxSize |
---|---|
+maxSize | 防止结果为负数 |