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 句に同じ 2 行があります。これらの 2 行を移動して、if 句を節約できるはずです。私はあなたの論理に 100% 賛成しているわけではないので、if ステートメントの前に配置できることを確認してください。

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