Как я могу кодировать простой циклический буфер в C/С++? Я вижу много шаблонов и сложных структур данных для реализации циклического буфера. Как мне закодировать простой круглый круглый буфер для 5 чисел? Я думаю, что C является самым простым? Спасибо. Ответ 1 Имейте массив, buffer, из 5 целых чисел. Имейте индекс ind в следующий элемент. Когда вы добавляете, сделайте buffer[ind] = value; ind = (ind + 1) % 5; Ответ 2 Возьмите массив, arr, индекс idx и счетчик num. Чтобы вставить foo, скажем arr[idx++] = foo; idx %= buffer_len; num++;. Чтобы прочитать элемент в foo, скажем foo = arr[(idx-num)%buffer_len]; num--;. Добавить граничные проверки. Ответ 3 Если размер и тип данных вашего буфера фиксированы, вам понадобится простой массив: int buffer[5]; Добавьте к этому пару указателей: int* start = &buffer[0]; int* end = &buffer[4]+1; int* input = start; int* output = start; Ответ 4 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 Имейте массив, buffer, из 5 целых чисел. Имейте индекс ind в следующий элемент. Когда вы добавляете, сделайте buffer[ind] = value; ind = (ind + 1) % 5;
Ответ 2 Возьмите массив, arr, индекс idx и счетчик num. Чтобы вставить foo, скажем arr[idx++] = foo; idx %= buffer_len; num++;. Чтобы прочитать элемент в foo, скажем foo = arr[(idx-num)%buffer_len]; num--;. Добавить граничные проверки.
Ответ 3 Если размер и тип данных вашего буфера фиксированы, вам понадобится простой массив: int buffer[5]; Добавьте к этому пару указателей: int* start = &buffer[0]; int* end = &buffer[4]+1; int* input = start; int* output = start;
Ответ 4 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); }