这是在C语言中实现带环形缓冲区队列的程序的一部分。
我不明白8-9号线。
这行if(q->rear == q->max) q->rear = 0;到底是什么意思?
如果后面的指数等于最大容量。。。然后把0分配给后面?图特
请帮帮我!

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->rear0之间。因此,如果(q->max -1)变得等于q->rear,则它将表示一个超出q->max数组末尾的索引,并且(作为循环队列)必须定位回数组的开头(q->que[])。
因此,以下逻辑:

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

关于c - 用环形缓冲区实现队列的代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56096760/

10-11 18:08