我正在尝试编写一个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增加超过数组大小,这不会移位数据并且一旦数组已满就会失败。有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
What Dan said,你真的不能在return
之后发表声明;他们没有被处决。
答案 1 :(得分:0)
您正在尝试创建循环队列而不执行额外的步骤来使其工作。您需要这样做(如cHao所述)或查看使用链接列表。我建议努力使用循环队列,因为它不需要太多修改。
此外,在两个if / else子句中都有相同的两行。您应该能够将这两行移出并保存自己if子句。我不是100%的逻辑,所以要确保它可以在if语句之前。
int Qinsert()
{
r++;
Q[r]=SPI1BUF;
if(Qfull())
{
//...
}
}