Circular buffer готовый
This commit is contained in:
parent
993d23b928
commit
3e0315a422
42
Circular buffer/сircular_buf.c
Normal file
42
Circular buffer/сircular_buf.c
Normal file
@ -0,0 +1,42 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define BUFFER_SIZE 10
|
||||
|
||||
typedef struct {
|
||||
int buffer[BUFFER_SIZE];
|
||||
int BufHead;
|
||||
int BufTail;
|
||||
} CircularBuffer;
|
||||
|
||||
void initializeBuffer(CircularBuffer* cb) {
|
||||
cb->BufHead = 0;
|
||||
cb->BufTail = 0;
|
||||
}
|
||||
// Проверка, является ли буфер пустым
|
||||
int BufferEmpty(const CircularBuffer* cb) {
|
||||
return cb->BufHead == cb->BufTail;
|
||||
}
|
||||
// Проверка, является ли буфер полным
|
||||
int BufferFull(const CircularBuffer* cb) {
|
||||
return (cb->BufTail + 1) % BUFFER_SIZE == cb->BufHead;//проверяем слудеющее число, если оно будет совпадать с индексом головы то будет false, при совпадении вывыедет true
|
||||
}
|
||||
// Запись элемента в буфер
|
||||
void writeBuffer(CircularBuffer* cb, int value) {
|
||||
if (BufferFull(cb)) { // проверка на заполненность
|
||||
return;
|
||||
}
|
||||
cb->buffer[cb->BufTail] = value;//записывает значение value в элемент массива buffer в хвост
|
||||
cb->BufTail = (cb->BufTail + 1) % BUFFER_SIZE;//присваивается cb->BufTail, обновляя его значение на следующий индекс в кольцевом буфере
|
||||
}
|
||||
// Чтение элемента из буфера
|
||||
int readBuffer(CircularBuffer* cb) {
|
||||
if (BufferEmpty(cb)) { //проверяет буффер на пустоту
|
||||
return -1;// -1 в качестве индикатора ошибки
|
||||
}
|
||||
int value = cb->buffer[cb->BufHead]; //читаем значение из массива по индексу головы
|
||||
cb->BufHead = (cb->BufHead + 1) % BUFFER_SIZE; //увеличиваем индекс головы +1
|
||||
return value;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user