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

时间:2019-05-12 06:33:45

标签: c queue que

这是用于在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;
    }
}

1 个答案:

答案 0 :(得分:1)

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[]数组末尾的索引,并且(作为循环队列)必须重新定位到数组的开头({{1)}。

因此,逻辑:

q->que[0]