使用C语言模拟出容器Queue,包含insert,del函数等
时间: 2024-10-22 07:04:47 浏览: 27
C语言头文件 QUEUE.H
5星 · 资源好评率100%
在C语言中,我们可以使用数组或者链表来模拟队列(Queue)的数据结构。这里我们以动态链表为例,因为链表可以方便地实现插入(enqueue)和删除(dequeue)操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 容器队列结构体
typedef struct Queue {
Node* front; // 队首指针
Node* rear; // 队尾指针
int size; // 队列元素个数
} Queue;
// 初始化队列
Queue* create_queue() {
Queue* queue = (Queue*)malloc(sizeof(Queue));
queue->front = NULL;
queue->rear = NULL;
queue->size = 0;
return queue;
}
// 插入元素到队尾
void enqueue(Queue* queue, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
if (queue->rear == NULL) {
queue->front = queue->rear = newNode;
} else {
queue->rear->next = newNode;
queue->rear = newNode;
}
queue->size++;
}
// 删除并返回队首元素
int dequeue(Queue* queue) {
if (queue->front == NULL) {
printf("Queue is empty.\n");
return -1; // 或者抛出错误处理
}
int value = queue->front->data;
Node* temp = queue->front;
queue->front = queue->front->next;
if (queue->front == NULL) {
queue->rear = NULL;
}
free(temp);
queue->size--;
return value;
}
// 检查队列是否为空
int is_empty(Queue* queue) {
return queue->front == NULL;
}
// 打印队列内容
void print_queue(Queue* queue) {
Node* current = queue->front;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
int main() {
Queue* q = create_queue();
enqueue(q, 1);
enqueue(q, 2);
enqueue(q, 3);
print_queue(q); // 输出: 1 2 3
int removed = dequeue(q);
printf("Removed element: %d\n", removed); // 输出: Removed element: 1
print_queue(q); // 输出: 2 3
return 0;
}
```
阅读全文