要在 C 語言中實現一個隊列,可以使用數組或鏈表來存儲元素,并使用相應的操作來實現隊列的基本功能。下面是一個使用數組實現隊列的示例代碼:
#include#define MAX_SIZE 100 typedef struct { int data[MAX_SIZE]; int front; int rear; } Queue; void initQueue(Queue* q) { q->front = -1; q->rear = -1; } int isEmpty(Queue* q) { return (q->front == -1 && q->rear == -1); } int isFull(Queue* q) { return (q->rear == MAX_SIZE - 1); } void enqueue(Queue* q, int value) { if (isFull(q)) { printf("Error: Queue is full\n"); return; } if (isEmpty(q)) { q->front = 0; } q->rear++; q->data[q->rear] = value; } int dequeue(Queue* q) { if (isEmpty(q)) { printf("Error: Queue is empty\n"); return -1; } int value = q->data[q->front]; if (q->front == q->rear) { // If there is only one element in the queue q->front = -1; q->rear = -1; } else { q->front++; } return value; } int main() { Queue q; initQueue(&q); enqueue(&q, 10); enqueue(&q, 20); enqueue(&q, 30); printf("Dequeued: %d\n", dequeue(&q)); printf("Dequeued: %d\n", dequeue(&q)); printf("Dequeued: %d\n", dequeue(&q)); return 0; }
在上述代碼中,我們定義了一個 `Queue` 結構體來表示隊列,其中包含一個大小為 `MAX_SIZE` 的整型數組用于存儲元素,以及 `front` 和 `rear` 兩個指針分別指向隊列的頭和尾。
`initQueue()` 函數用于初始化隊列,將 `front` 和 `rear` 置為 -1 表示隊列為空。
`isEmpty()` 函數檢查隊列是否為空,如果 `front` 和 `rear` 都是 -1,則表明隊列為空。
`isFull()` 函數檢查隊列是否已滿,如果 `rear` 等于 `MAX_SIZE - 1`,則表示隊列已滿。
`enqueue()` 函數用于入隊操作,向隊列尾部添加元素。首先檢查隊列是否已滿,如果已滿則輸出錯誤信息。如果隊列為空,將 `front` 設置為 0。然后將 `rear` 增加 1,并將新的元素存儲在隊列的尾部。
`dequeue()` 函數用于出隊操作,從隊列頭部取出元素并返回。首先檢查隊列是否為空,如果為空則輸出錯誤信息。如果隊列只有一個元素,將 `front` 和 `rear` 都設置為 -1。否則,將 `front` 增加 1,并返回隊列頭部的元素。
以上代碼輸出結果為:
Dequeued: 10 Dequeued: 20 Dequeued: 30
這樣就完成了使用數組實現的隊列操作。如果想要使用鏈表實現隊列,可以使用類似的思路,只是節點的定義和操作會有所不同。