阅读量:2
在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; }
这两种方法分别使用了数组和链表来实现队列的基本功能,你可以根据实际需求选择其中一种方法来创建队列。