C语言写的 环形缓冲队列 功能代码

    环形缓冲队列是一种常见的数据结构,可以用于在多个线程之间进行数据传输。下面是一个用C语言实现的环形缓冲队列的代码:
    在以下的代码中,定义了一个结构体Queue来表示环形缓冲队列,其中包含了一个指向存储数据的缓冲区buffer,以及头指针head和尾指针tail,以及队列的大小size。
    首先定义了createQueue函数来创建一个新的队列对象,并分配缓冲区的内存。然后,定义了isFull和isEmpty函数来检查队列是否满或空。enqueue函数用于向队列中添加数据,如果队列已满,则不添加数据并打印错误消息。dequeue函数用于从队列中删除数据,如果队列为空,则不删除数据并打印错误消息。printQueue函数用于打印队列中的数据。
    在main函数中,首先创建一个队列对象,然后向队列中添加10个数据。由于队列的大小为10,所以添加第11个数据时,队列已满,不会添加数据并打印错误消息。接着,从队列中删除了前三个数据,并用printQueue函数打印了当前队列中的数据。最后,向队列中添加了3个数据,并用printQueue函数打印了最终的队列中的数据。
    以下就是一个用C语言实现的环形缓冲队列的代码。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define QUEUE_SIZE 10

typedef struct 
{
    int* buffer;
    int head;
    int tail;
    int size;
} Queue;

/* 创建队列 */
Queue* createQueue(int size) 
{
    Queue* queue = (Queue*) malloc(sizeof(Queue));
    queue->buffer = (int*) malloc(size * sizeof(int));
    queue->head = 0;
    queue->tail = 0;
    queue->size = size;
    return queue;
}

/* 队列满 */
bool isFull(Queue* queue) 
{
    return (queue->tail + 1) % queue->size == queue->head;
}

/* 队列空 */
bool isEmpty(Queue* queue) 
{
    return queue->head == queue->tail;
}

/* 入队列 */
void enqueue(Queue* queue, int data) 
{
    if (isFull(queue)) {
        printf("Queue is full!\n");
        return;
    }
    queue->buffer[queue->tail] = data;
    queue->tail = (queue->tail + 1) % queue->size;
}

/* 出队列 */
int dequeue(Queue* queue) 
{
    if (isEmpty(queue)) {
        printf("Queue is empty!\n");
        return -1;
    }
    int data = queue->buffer[queue->head];
    queue->head = (queue->head + 1) % queue->size;
    return data;
}

/* 打印队列 */
void printQueue(Queue* queue) 
{
    printf("Queue: ");
    int i = queue->head;
    while (i != queue->tail) {
        printf("%d ", queue->buffer[i]);
        i = (i + 1) % queue->size;
    }
    printf("\n");
}

int main() 
{
    Queue* queue = createQueue(QUEUE_SIZE);
    enqueue(queue, 1);
    enqueue(queue, 2);
    enqueue(queue, 3);
    enqueue(queue, 4);
    enqueue(queue, 5);
    enqueue(queue, 6);
    enqueue(queue, 7);
    enqueue(queue, 8);
    enqueue(queue, 9);
    enqueue(queue, 10);
    enqueue(queue, 11);
    printQueue(queue);
    dequeue(queue);
    dequeue(queue);
    dequeue(queue);
    printQueue(queue);
    enqueue(queue, 11);
    enqueue(queue, 12);
    enqueue(queue, 13);
    printQueue(queue);
    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值