在C语言中,实现队列这种数据结构,可以使用数组或链表。以下是使用这两种数据结构实现队列的示例:
方法一:使用数组
#include#include #define SIZE 5 typedef struct { int data[SIZE]; int front; int rear; } Queue; Queue q; void initQueue() { q.front = q.rear = -1; } int isFull() { return (q.rear + 1) % SIZE == q.front; } int isEmpty() { return q.front == -1; } void enqueue(int item) { if (isFull()) { printf("Queue is full.\n"); return; } if (isEmpty()) { q.front = q.rear = 0; } else { q.rear = (q.rear + 1) % SIZE; } q.data[q.rear] = item; } int dequeue() { if (isEmpty()) { printf("Queue is empty.\n"); return -1; } int item = q.data[q.front]; if (q.front == q.rear) { q.front = q.rear = -1; } else { q.front = (q.front + 1) % SIZE; } return item; } int main() { initQueue(); enqueue(1); enqueue(2); enqueue(3); printf("Dequeued: %d\n", dequeue()); printf("Dequeued: %d\n", dequeue()); return 0; }
方法二:使用链表
#include#include typedef struct Node { int data; struct Node* next; } Node; typedef struct { Node* front; Node* rear; } Queue; Queue* createQueue() { Queue* q = (Queue*)malloc(sizeof(Queue)); q->front = q->rear = NULL; return q; } void initQueue(Queue* q) { q->front = q->rear = NULL; } int isFull(Queue* q) { return q->rear->next == NULL; } int isEmpty(Queue* q) { return q->front == NULL; } void enqueue(Queue* q, int item) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = https://www.yisu.com/ask/item;>next = NULL; if (isFull(q)) { printf("Queue is full.\n"); return; } 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 item = temp->data; q->front = q->front->next; if (q->front == NULL) { q->rear = NULL; } free(temp); return item; } int main() { Queue* q = createQueue(); initQueue(q); enqueue(q, 1); enqueue(q, 2); enqueue(q, 3); printf("Dequeued: %d\n", dequeue(q)); printf("Dequeued: %d\n", dequeue(q)); return 0; }
这两种方法都可以实现队列的基本操作,包括入队(enqueue)和出队(dequeue)。你可以根据自己的需求和场景选择合适的方法。