在C语言中,可以使用数组或链表实现队列。以下是两种常见的队列实现方法:
使用数组:#include <stdio.h>#define MAX_SIZE 100// 定义队列结构体typedef struct { int data[MAX_SIZE]; int front; // 队头指针 int rear; // 队尾指针} Queue;// 初始化队列void initQueue(Queue *q) { q->front = q->rear = 0;}// 判断队列是否为空int isEmpty(Queue *q) { return q->front == q->rear;}// 判断队列是否已满int isFull(Queue *q) { return q->rear == MAX_SIZE - 1;}// 入队void enqueue(Queue *q, int value) { if(isFull(q)) { printf("Queue is full.\n"); return; } q->data[q->rear++] = value;}// 出队int dequeue(Queue *q) { if(isEmpty(q)) { printf("Queue is empty.\n"); return -1; } return q->data[q->front++];}// 获取队头元素int getFront(Queue *q) { if(isEmpty(q)) { printf("Queue is empty.\n"); return -1; } return q->data[q->front];}// 获取队列长度int getSize(Queue *q) { return q->rear - q->front;}int main() { Queue q; initQueue(&q); enqueue(&q, 1); enqueue(&q, 2); enqueue(&q, 3); printf("Front element: %d\n", getFront(&q)); printf("Size: %d\n", getSize(&q)); printf("Dequeue: %d\n", dequeue(&q)); printf("Size: %d\n", getSize(&q)); return 0;}使用链表:#include <stdio.h>#include <stdlib.h>// 定义链表节点结构体typedef struct Node { int data; struct Node *next;} Node;// 定义队列结构体typedef struct { Node *front; // 队头指针 Node *rear; // 队尾指针} Queue;// 初始化队列void initQueue(Queue *q) { q->front = q->rear = NULL;}// 判断队列是否为空int isEmpty(Queue *q) { return q->front == NULL;}// 入队void enqueue(Queue *q, int value) { Node *newNode = (Node*)malloc(sizeof(Node)); newNode->data = value; newNode->next = NULL; if(isEmpty(q)) { q->front = q->rear = newNode; } else { q->rear->next = newNode; q->rear = newNode; }}// 出队int dequeue(Queue *q) { if(isEmpty(q)) { printf("Queue is empty.\n"); return -1; } Node *temp = q->front; int value = temp->data; q->front = q->front->next; free(temp); if(q->front == NULL) { q->rear = NULL; } return value;}// 获取队头元素int getFront(Queue *q) { if(isEmpty(q)) { printf("Queue is empty.\n"); return -1; } return q->front->data;}int main() { Queue q; initQueue(&q); enqueue(&q, 1); enqueue(&q, 2); enqueue(&q, 3); printf("Front element: %d\n", getFront(&q)); printf("Dequeue: %d\n", dequeue(&q)); printf("Dequeue: %d\n", dequeue(&q)); return 0;}这两种方法分别使用了数组和链表来实现队列的基本功能,你可以根据实际需求选择其中一种方法来创建队列。

