帮我实现一个队列,使用C语言,要求队列数据类型为uint8_t*,队列大小为10
时间: 2024-05-10 13:13:44 浏览: 137
所有基础数据结构和算法的纯C语言实现,如各自排序、链表、栈、队列、各种树....
Sure, 我可以帮你实现一个队列。以下是代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define QUEUE_SIZE 10
typedef struct {
uint8_t *data;
uint8_t head;
uint8_t tail;
uint8_t size;
} Queue;
Queue *queue_create() {
Queue *q = (Queue *)malloc(sizeof(Queue));
q->data = (uint8_t *)malloc(QUEUE_SIZE * sizeof(uint8_t *));
q->head = 0;
q->tail = 0;
q->size = QUEUE_SIZE;
return q;
}
void queue_destroy(Queue *q) {
free(q->data);
free(q);
}
int queue_push(Queue *q, uint8_t *data) {
if ((q->tail + 1) % q->size == q->head) {
return 0;
}
q->data[q->tail] = *data;
q->tail = (q->tail + 1) % q->size;
return 1;
}
int queue_pop(Queue *q, uint8_t *data) {
if (q->head == q->tail) {
return 0;
}
*data = q->data[q->head];
q->head = (q->head + 1) % q->size;
return 1;
}
int queue_is_empty(Queue *q) {
return q->head == q->tail;
}
int queue_is_full(Queue *q) {
return (q->tail + 1) % q->size == q->head;
}
int main() {
Queue *q = queue_create();
uint8_t data1 = 1;
uint8_t data2 = 2;
if (!queue_push(q, &data1)) {
printf("Queue is full!\n");
}
if (!queue_push(q, &data2)) {
printf("Queue is full!\n");
}
uint8_t result;
while (!queue_is_empty(q)) {
if (queue_pop(q, &result)) {
printf("Popped: %d\n", result);
}
}
queue_destroy(q);
return 0;
}
```
这是一个简单的队列实现,使用了循环数组来保存数据。队列的大小为10,数据类型为uint8_t*。队列可以进行push和pop操作,这样你就可以从队列中取出你的数据了。你可以根据你的需要进行修改和优化。
阅读全文