环形缓冲区实现队列的代码

Code for implementing queue with ring buffer

这是在C语言中用环形缓冲区实现队列的程序的一部分。 我不明白第 8-9 行。 这行 if(q->rear == q->max) q->rear = 0; 到底是什么意思?

如果后端索引等于最大容量...那么将零分配给后端? T_T 请帮助我!

int Enque(IntQueue* q,int x)
{
    if (q->num >= q->max)
        return -1;
    else {
        q->num++;
        q->que[q->rear++] = x;
        if(q->rear == q->max)
            q->rear = 0;
        return 0;
    }
}

q->que[] 是一个整数数组。单个数组 q->que[] 整数元素通过在数组中指定它们的索引来访问,例如:q->que[n]; 其中 n 是从 0(q->max - 1) 的值。

q->rear 表示数组 q->que[] 的索引。 q->rear 的值可以是从 0(q->max -1) 的任何值。因此,如果 q->rear 变得等于 q->max,它将表示超出 q->que[] 数组末尾的索引,并且(作为循环队列)必须返回到数组的开头 (q->que[0]).

因此,逻辑:

if (q->rear == q->max)
    q->rear = 0;