4

我正在尝试编写一个 FIFO 队列,该队列接收数据,一旦完全释放最旧的数据,为新数据腾出空间。

我是编程新手,但设法提出了以下代码:

int Q[size], f=0, r=-1;

int Qfull()
{
    if (r==size) return 1;
    return 0;
}

int Qinsert()
{
    if(Qfull())
    {
        elem=Q[f];
        f=f+1;
        return elem;
        r++;
        Q[r]=SPI1BUF;

    }
    else
    {
        r++;
        Q[r]=SPI1BUF;
    }
}

我遇到的问题是,这不会移动数据,并且一旦数组已满,由于 r 增加超过数组大小,它将失败。有没有办法解决这个问题?

4

2 回答 2

1

丹所说的,你真的不能在后面加上陈述return;他们不会被处决。

于 2013-11-04T16:08:09.350 回答
0

您正在尝试创建一个循环队列,而无需执行额外的步骤来完成这项工作。您要么需要这样做(如 cHao 所述),要么考虑使用链表。我建议使用循环队列,因为它不需要太多修改。

此外,您的两个 if/else 子句中有相同的两行。您应该能够将这两行移出并保存 if 子句。我不是 100% 你的逻辑,所以确保它可以在 if 语句之前。

int Qinsert()
{
    r++;
    Q[r]=SPI1BUF;
    if(Qfull())
    {
    //...
    }
}
于 2013-11-04T16:40:59.333 回答