在Linux C编程中,队列(Queue)是一种常见的数据结构,遵循先进先出(FIFO, First In First Out)的原则。队列在多线程编程、任务调度、缓冲处理等多个场景中有广泛应用。
队列由一系列元素组成,这些元素按照它们进入队列的顺序排列。队列有两个主要操作:
下面是一个简单的链式队列实现示例:
#include <stdio.h>
#include <stdlib.h>
// 定义队列节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 定义队列结构
typedef struct Queue {
Node* front;
Node* rear;
} Queue;
// 初始化队列
void initQueue(Queue* q) {
q->front = q->rear = NULL;
}
// 入队操作
void enqueue(Queue* q, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation error
");
exit(1);
}
newNode->data = value;
newNode->next = NULL;
if (q->rear == NULL) {
q->front = q->rear = newNode;
return;
}
q->rear->next = newNode;
q->rear = newNode;
}
// 出队操作
int dequeue(Queue* q) {
if (q->front == NULL) {
printf("Queue is empty
");
exit(1);
}
Node* temp = q->front;
int value = temp->data;
q->front = q->front->next;
if (q->front == NULL) {
q->rear = NULL;
}
free(temp);
return value;
}
// 检查队列是否为空
int isEmpty(Queue* q) {
return q->front == NULL;
}
// 测试队列
int main() {
Queue q;
initQueue(&q);
enqueue(&q, 10);
enqueue(&q, 20);
enqueue(&q, 30);
printf("Dequeued: %d
", dequeue(&q));
printf("Dequeued: %d
", dequeue(&q));
printf("Is queue empty? %s
", isEmpty(&q) ? "Yes" : "No");
printf("Dequeued: %d
", dequeue(&q));
printf("Is queue empty? %s
", isEmpty(&q) ? "Yes" : "No");
return 0;
}
在多线程环境中,可以使用pthread_mutex_t
来保护队列操作:
#include <pthread.h>
pthread_mutex_t lock;
void enqueue(Queue* q, int value) {
pthread_mutex_lock(&lock);
// 入队操作
pthread_mutex_unlock(&lock);
}
int dequeue(Queue* q) {
pthread_mutex_lock(&lock);
// 出队操作
pthread_mutex_unlock(&lock);
return value;
}
通过以上方法,可以确保队列在多线程环境中的安全性。
领取专属 10元无门槛券
手把手带您无忧上云