帮我实现一个队列,使用C语言,要求队列数据类型为uint8_t[],队列大小为10,要求队列有自己的独立空间存储数据,队列可以进行push和pop操作,这样你就可以从队列中取出你的数据了
时间: 2024-06-06 18:09:06 浏览: 58
队列的C语言实现
好的,以下是满足你要求的队列的C语言实现代码:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define MAX_QUEUE_SIZE 10 // 队列最大大小
typedef struct {
uint8_t *buffer; // 队列缓冲区
int front; // 队头指针
int rear; // 队尾指针
int size; // 当前队列大小
} Queue;
Queue* CreateQueue() {
Queue* q = (Queue*) malloc(sizeof(Queue));
q->buffer = (uint8_t*) malloc(sizeof(uint8_t) * MAX_QUEUE_SIZE);
q->front = q->rear = q->size = 0;
return q;
}
void DestroyQueue(Queue* q) {
free(q->buffer);
free(q);
}
int IsQueueFull(Queue* q) {
return q->size >= MAX_QUEUE_SIZE;
}
int IsQueueEmpty(Queue* q) {
return q->size == 0;
}
void Enqueue(Queue* q, uint8_t data[]) {
if (IsQueueFull(q)) {
printf("队列已满,无法入队!\n");
return;
}
for (int i = 0; i < sizeof(data); i++) {
q->buffer[q->rear] = data[i];
q->rear = (q->rear + 1) % MAX_QUEUE_SIZE;
}
q->size++;
}
void Dequeue(Queue* q, uint8_t data[]) {
if (IsQueueEmpty(q)) {
printf("队列已空,无法出队!\n");
return;
}
for (int i = 0; i < sizeof(data); i++) {
data[i] = q->buffer[q->front];
q->front = (q->front + 1) % MAX_QUEUE_SIZE;
}
q->size--;
}
int main() {
Queue* q = CreateQueue();
uint8_t data[] = {1, 2, 3, 4, 5}; // 入队数据
uint8_t res[5]; // 出队数据
Enqueue(q, data);
Dequeue(q, res);
for (int i = 0; i < sizeof(res); i++) {
printf("%d ", res[i]); // 输出:1 2 3 4 5
}
DestroyQueue(q);
return 0;
}
阅读全文