回答
有一個數組,buffer
,有5個整數。有一個索引ind
到下一個元素。當您添加,做
buffer[ind] = value;
ind = (ind + 1) % 5;
從個人體驗文件中,您需要注意ind不是負面的。如果將第二行更改爲「ind =(max(0,ind)%1)+ 5;」,則不必擔心ind的負值。 – 2010-09-02 02:40:01
你爲什麼不只是將ind設置爲uint?如果僅涉及添加,這將更有效地解決您的問題 – Triskeldeian 2016-04-09 09:13:56
如果你的緩衝區的大小和數據類型是固定的,一個簡單的數組是所有你需要:
int buffer[5];
再加上一對夫婦指針:
int* start = &buffer[0];
int* end = &buffer[4]+1;
int* input = start;
int* output = start;
取一個數組,arr
,索引idx
,以及一個計數器num
。
插入foo
,比如arr[idx++] = foo; idx %= buffer_len; num++;
。
讀出一個項目到foo
,說foo = arr[(idx-num)%buffer_len]; num--;
。
添加邊界檢查。
您不需要num和idx。 – user3467349 2015-03-12 22:48:51
int rI =0;
int wI=0;
#define FIFO_SIZE 3
int checkAvail()
{
int avail=0;
if(wI<rI)
avail= (rI-wI);
else
avail = (FIFO_SIZE-wI+rI);
return avail;
}
int addFIFO(int *a, int val)
{
if(checkAvail()>0)
{
a[wI]=val;
wI++;
if(wI>FIFO_SIZE)
wI=0;
}
else
{
printf("FIFO full");
}
return 0;
}
int remFIFO(int *a)
{
int val;
if((FIFO_SIZE-checkAvail()>0))
{
val =a[rI];
rI++;
if(rI>FIFO_SIZE)
rI=0;
}
else
{
printf("FIFO empty");
}
return 0;
}
int main(array<System::String ^> ^args)
{
int FIFO_ARRAY[FIFO_SIZE]={};
addFIFO(FIFO_ARRAY,1);
addFIFO(FIFO_ARRAY,2);
addFIFO(FIFO_ARRAY,3);
addFIFO(FIFO_ARRAY,4);
remFIFO(FIFO_ARRAY);
remFIFO(FIFO_ARRAY);
remFIFO(FIFO_ARRAY);
remFIFO(FIFO_ARRAY);
remFIFO(FIFO_ARRAY);
}
- 1. C++簡單循環緩衝區隊列
- 2. Recv環形緩衝區vs簡單緩衝區
- 3. 如何在環形緩衝區中編寫字符串和整數?
- 4. 我簡單的循環緩衝區不能正常工作
- 5. 您如何編寫Java或C#中的高效循環緩衝區?
- 6. 高效循環緩衝區?
- 7. 循環緩衝區優化
- 8. 逆循環緩衝區
- 9. 縮小循環緩衝區
- 10. 循環緩衝區「requestBufferSize:couchbase
- 11. 如何在C中實現循環列表(環形緩衝區)?
- 12. ActionScript3中的循環視頻緩衝區
- 13. O(1)haskell中的循環緩衝區?
- 14. Java中的循環緩衝區?
- 15. VB.NET中的循環緩衝區
- 16. Simulink中的循環緩衝區
- 17. 爲什麼我的環形緩衝區/循環緩衝區在java打破?
- 18. 嘗試在循環緩衝區 - Javascript
- 19. 循環通過緩衝區在Emacs
- 20. 編寫一個簡單的循環
- 21. 如何在SelectListItems列表中實現循環緩衝區?
- 22. 如何在Python中實現循環緩衝區?
- 23. 如何在黑莓或Java中實現循環緩衝區?
- 24. 如何在OpenGL中將整數寫入紋理緩衝區
- 25. 使用SQL的循環緩衝區
- 26. 矢量的循環緩衝區
- 27. 循環緩衝區的線程安全
- 28. 循環緩衝區如何用於hadoop中的溢出處理?
- 29. 複製整數緩衝區如果緩衝區在C
- 30. 如何將緩衝區寫入緩衝區
代碼的複雜性隨着您希望它的安全性和可靠性而提高。例如,你想要防止下溢/溢出嗎? – 2010-09-01 20:38:28
注意:圓形(環形)緩衝區不同於循環*隊列*。 – 2010-09-01 20:42:32
我只需要存儲一些數據的最後5個值,所以有更好的設計可以做到這一點。 – 2010-09-01 20:43:39