如何用C语言实现一个队列的数据结构,包括初始化、入队操作、出队操作、元素查找、遍历以及销毁?
时间: 2024-12-08 22:22:33 浏览: 5
在C语言中,我们可以使用数组或链表来实现一个简单的队列数据结构。这里以动态数组为例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int* array; // 存储元素的数组
int front; // 队头指针
int rear; // 队尾指针
int capacity; // 数组容量
} Queue;
// 初始化队列
Queue* create_queue(int capacity) {
Queue* queue = (Queue*) malloc(sizeof(Queue));
queue->array = (int*) malloc(capacity * sizeof(int));
queue->front = -1;
queue->rear = -1;
queue->capacity = capacity;
return queue;
}
// 入队操作 (enqueue)
void enqueue(Queue* queue, int data) {
if ((queue->rear + 1) % queue->capacity == queue->front) {
printf("Queue is full.\n");
return;
}
queue->rear = (queue->rear + 1) % queue->capacity;
queue->array[queue->rear] = data;
}
// 出队操作 (dequeue)
int dequeue(Queue* queue) {
if (queue->front == -1 || queue->front == queue->rear) {
printf("Queue is empty.\n");
return -1;
}
int data = queue->array[queue->front];
queue->front = (queue->front + 1) % queue->capacity;
return data;
}
// 查找元素 (find)
int find(Queue* queue, int target) {
for (int i = 0; i <= queue->rear - queue->front; ++i) {
if (queue->array[(queue->front + i) % queue->capacity] == target)
return 1; // 成功找到元素
}
return 0; // 没有找到元素
}
// 遍历 (traverse)
void traverse(Queue* queue) {
if (queue->front == -1) {
printf("Queue is empty.\n");
return;
}
for (int i = 0; i <= queue->rear - queue->front; ++i) {
printf("%d ", queue->array[(queue->front + i) % queue->capacity]);
}
printf("\n");
}
// 销毁队列
void destroy_queue(Queue* queue) {
free(queue->array);
free(queue);
}
// 示例
int main() {
Queue* q = create_queue(5);
enqueue(q, 1);
enqueue(q, 2);
dequeue(q); // 应该打印出 "1"
traverse(q); // 应该打印出 "2"
destroy_queue(q);
return 0;
}
```
以上就是用C语言实现的一个简单队列,包含了初始化、入队、出队、元素查找、遍历和销毁的操作。
阅读全文