/** * @file main.c * @author guishenking (guishenking@outlook.com) * @brief * @version 0.1 * @date 2025-08-15 * * @copyright Copyright (c) 2025 * */ #include "queue.h" #include void print_int(void *data, size_t idx) { printf("Index %zu: %d\n", idx, *(int *)data); } int main(void) { queue_t q; int ret; // 初始化队列,存储int类型 if (!queue_init(&q, sizeof(int))) { printf("Init failed!\n"); return -1; } // 入队 for (int i = 1; i <= 10; ++i) { ret = queue_enqueue(&q, &i); printf("Enqueue %d: %s\n", i, ret ? "OK" : "FAIL"); } queue_foreach(&q, print_int); // 查询第3个元素 int val = 0; if (queue_peek_at(&q, 2, &val)) { printf("Peek index 2: %d\n", val); } // 从头部出队 for (int i = 0; i < 2; ++i) { if (queue_dequeue_head(&q, &val)) { printf("Dequeue head: %d\n", val); } } queue_foreach(&q, print_int); // 从尾部出队 if (queue_dequeue_tail(&q, &val)) { printf("Dequeue tail: %d\n", val); } queue_foreach(&q, print_int); // 抛弃前3个 size_t dropped = queue_drop_head(&q, 3); printf("Drop head 3, actually dropped: %zu\n", dropped); queue_foreach(&q, print_int); // 抛弃尾部10个(超出队列长度,实际清空) dropped = queue_drop_tail(&q, 10); printf("Drop tail 10, actually dropped: %zu\n", dropped); queue_foreach(&q, print_int); // 销毁队列 queue_destroy(&q); printf("Queue destroyed.\n"); return 0; }