#include <stdlib.h>
// 定义队列结构体
typedef struct {
void **data; // 存储数据的数组
size_t size; // 当前元素个数
size_t capacity; // 队列容量
} Queue;
// 初始化队列
Queue* createQueue(size_t initialCapacity) {
Queue *queue = (Queue*)malloc(sizeof(Queue));
queue->data = (void**)malloc(initialCapacity * sizeof(void*));
queue->size = 0;
queue->capacity = initialCapacity;
return queue;
}
// 释放队列内存
void freeQueue(Queue *queue) {
free(queue->data);
free(queue);
}
// 扩容队列
void resizeQueue(Queue *queue) {
queue->capacity *= 2;
queue->data = (void**)realloc(queue->data, queue->capacity * sizeof(void*));
}
// 入队操作
void enqueue(Queue *queue, void *element) {
if (queue->size == queue->capacity) {
resizeQueue(queue);
}
queue->data[queue->size++] = element;
}
// 出队操作
void* dequeue(Queue *queue) {
if (queue->size == 0) {
return NULL;
}
void *element = queue->data[0];
for (size_t i = 1; i < queue->size; i++) {
queue->data[i - 1] = queue->data[i];
}
queue->size--;
return element;
}
// 获取队列头部元素但不出队
void* peek(Queue *queue) {
if (queue->size == 0) {
return NULL;
}
return queue->data[0];
}
// 判断队列是否为空
bool isQueueEmpty(Queue *queue) {
return queue->size == 0;
}
// 获取队列大小
size_t queueSize(Queue *queue) {
return queue->size;
}
#include <stdio.h>
#include <stdlib.h>
// 示例使用
// 定义一个简单的结构体作为队列元素类型
typedef struct {
int value;
} MyType;
// 辅助打印函数
void printMyType(void *ptr) {
MyType *myType = (MyType*)ptr;
printf("%d ", myType->value);
}
// 主函数
int main() {
Queue *queue = createQueue(2);
// 创建一些 MyType 实例并入队
MyType item1 = {10};
MyType item2 = {20};
MyType item3 = {30};
enqueue(queue, &item1);
enqueue(queue, &item2);
enqueue(queue, &item3);
printf("Queue size: %zu\n", queueSize(queue));
printf("Peek: ");
MyType *peeked = (MyType*)peek(queue);
if (peeked) {
printMyType(peeked);
}
printf("\n");
printf("Dequeue elements: ");
while (!isQueueEmpty(queue)) {
MyType *dequeued = (MyType*)dequeue(queue);
if (dequeued) {
printMyType(dequeued);
}
}
printf("\n");
freeQueue(queue);
return 0;
}