使用C语言,创建一个queue容器,该容器的目的是为了存储数组,还要附加出列和入列还有删除和当前大小的函数,附代码
时间: 2024-10-22 17:29:57 浏览: 31
在C语言中,我们可以使用结构体(struct)和动态内存分配来创建一个队列容器,这里我们假设队列元素是一个整型数组。下面是一个简单的队列实现,包括enqueue(入列)、dequeue(出列)、delete(删除)和get_size(获取当前大小)等操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 队列结构体
typedef struct Queue {
int* arr; // 数组指针
size_t capacity; // 容量
size_t front; // 前端指针
size_t rear; // 后端指针
} Queue;
// 初始化队列
Queue* create_queue(size_t capacity) {
Queue* queue = (Queue*)malloc(sizeof(Queue));
queue->arr = (int*)malloc(capacity * sizeof(int));
queue->capacity = capacity;
queue->front = queue->rear = 0;
return queue;
}
// 入列操作
void enqueue(Queue* queue, int value) {
if (queue->rear == queue->capacity - 1) {
printf("Queue is full, cannot enqueue.\n");
return;
}
queue->arr[queue->rear] = value;
queue->rear = (queue->rear + 1) % queue->capacity;
}
// 出列操作
int dequeue(Queue* queue) {
if (queue->front == queue->rear) {
printf("Queue is empty, cannot dequeue.\n");
return -1;
}
int value = queue->arr[queue->front];
queue->front = (queue->front + 1) % queue->capacity;
return value;
}
// 删除队列并释放内存
void delete_queue(Queue* queue) {
free(queue->arr);
free(queue);
}
// 获取队列当前大小
size_t get_size(Queue* queue) {
return queue->rear >= queue->front ? queue->rear - queue->front : queue->capacity - queue->front;
}
int main() {
Queue* q = create_queue(5); // 创建一个容量为5的队列
enqueue(q, 1); // 入列
enqueue(q, 2); // 再次入列
printf("Current size: %zu\n", get_size(q)); // 输出当前大小
int removed_value = dequeue(q); // 出列
printf("Removed value: %d\n", removed_value);
delete_queue(q); // 删除队列
return 0;
}
```
在这个例子中,`create_queue()`用于初始化队列,`enqueue()`添加元素到队尾,`dequeue()`从队首移除元素,`delete_queue()`释放所有占用的内存,而`get_size()`则返回队列中的实际元素数。
阅读全文