溫馨提示×

c語言隊列實現代碼怎么寫

小億
96
2023-11-04 11:32:38
欄目: 編程語言

要在 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

這樣就完成了使用數組實現的隊列操作。如果想要使用鏈表實現隊列,可以使用類似的思路,只是節點的定義和操作會有所不同。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女