【程序设计竞赛算法】队列
队列(Queue)是一种重要的数据结构,它在计算机科学中被广泛使用。队列的特点是先进先出(FIFO),也就是说数据从队列的一端添加,从另一端移除。这个特性使队列特别适合用于处理需要按照特定顺序处理数据的任务,例如计算机作业调度、打印任务等。
队列的主要操作包括:
enqueue(入队):在队列尾部添加一个元素
dequeue(出队):从队列头部移出一个元素
is_empty:检查队列是否为空
peek/front:查看队列头部的元素(但不移出)
在 C 语言中,实现队列通常需要用到结构体(struct)。一个最基础的队列可能包含以下两个结构体:
(1)Node:一个结构体,表示队列中的一个节点。它通常包含一个数据域和一个指向下一个节点的指针。
(2)Queue:一个结构体,表示整个队列。它通常包含指向队列头部和尾部的指针。
以下是一个简单的 C 语言队列实现:
#include <stdio.h>
#include <stdlib.h>
// 节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 队列结构体
typedef struct Queue {
Node* front;
Node* rear;
} Queue;
// 创建一个新的节点
Node* new_node(int data) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->next = NULL;
return node;
}
// 创建一个空的队列
Queue* create_queue() {
Queue* q = (Queue*)malloc(sizeof(Queue));
q->front = q->rear = NULL;
return q;
}
// 添加元素到队列
void enqueue(Queue* q, int data) {
Node* node = new_node(data);
if (q->rear == NULL) {
q->front = q->rear = node;
return;
}
q->rear->next = node;
q->rear = node;
}
// 从队列中移除元素
int dequeue(Queue* q) {
if (q->front == NULL)
return INT_MIN;
Node* node = q->front;
int data = node->data;
q->front = q->front->next;
if (q->front == NULL)
q->rear = NULL;
free(node);
return data;
}
注意,上述代码并没有实现 is_empty 和 peek/front 操作,这些可以根据具体需求添加。