环形存储

发布时间 2023-03-28 09:19:23作者: flxx
#define BUFFER_SIZE 16

typedef struct {
    unsigned int buffer[BUFFER_SIZE]; // 环形缓冲区数组
    int head; // 头指针
    int tail; // 尾指针
} circular_buffer;

void cb_push(circular_buffer *cb, unsigned int value) {
    // 若环形缓冲区未满,则将新值存入环形缓冲区的尾指针指向的位置上,更新尾指针
    if ((cb->tail + 1) % BUFFER_SIZE != cb->head) {
        cb->buffer[cb->tail] = value;
        cb->tail = (cb->tail + 1) % BUFFER_SIZE;
    }
    // 如果环形缓冲区已满,则直接返回
}

unsigned int cb_pop(circular_buffer *cb) {
    if (cb->head == cb->tail) return -1; // 环形缓冲区为空,返回-1

    // 取出头指针指向的元素,更新头指针
    unsigned int value = cb->buffer[cb->head];
    cb->head = (cb->head + 1) % BUFFER_SIZE;
    
    // 返回取出的值
    return value;
}