我已经分析了以下代码很长时间,但是仍然不理解其中一个函数的一行代码,如下所示:
void ResizeQueue(struct DynArrayQueue* q) {
int size = q->capacity;
q->capactiy = q->capacity * 2;
q->array = realloc(q->array, q->capacity);
if (!q->array) {
printf("Memory error");
return;
}
// The doubt lines:
if (q->front > q->rear) {
for (int i = 0; i < q->front; i++) {
q->array[i + size] = q->array[i];
}
q->rear = q->rear + size;
}
}
我对这个环形队列的动态数组实现中有一个疑问,就是在什么时候前端指针会超过后端指针?
for(int i = 0 ; i<q->front ; i++)
- 第一部分,而不是for (i=q-<front;i<size;i++)
,后者会移动第二部分。我想一个高效的实现会选择这两个范围中较小的一个。 - AShelly