Код для реализации очереди с кольцевым буфером - PullRequest
1 голос
/ 12 мая 2019

Это часть программы для реализации очереди с кольцевым буфером на 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 Ответ

1 голос
/ 12 мая 2019

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;
...