在c中创建FIFO队列

时间:2013-11-04 16:02:04

标签: c arrays queue fifo

我正在尝试编写一个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增加超过数组大小,这不会移位数据并且一旦数组已满就会失败。有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

What Dan said,你真的不能在return之后发表声明;他们没有被处决。

答案 1 :(得分:0)

您正在尝试创建循环队列而不执行额外的步骤来使其工作。您需要这样做(如cHao所述)或查看使用链接列表。我建议努力使用循环队列,因为它不需要太多修改。

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

int Qinsert()
{
    r++;
    Q[r]=SPI1BUF;
    if(Qfull())
    {
    //...
    }
}