首页 > 解决方案 > 使用环形缓冲区实现队列的代码

问题描述

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

标签: cqueueque

解决方案


q->que[]是一个整数数组。通过在数组中指定它们的索引来访问单个数组q->que[]整数元素,例如:q->que[n];where nis a value from 0to (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;

推荐阅读