以下是利用循环单链表模拟实现队列操作的EnQueue(入队)和DeQueue(出队)过程的示例代码:

#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    int data;
    struct Node* next;
} Node;

typedef struct Queue {
    Node* front;
    Node* rear;
} Queue;

// 初始化队列
void initQueue(Queue* q) {
    q->front = NULL;
    q->rear = NULL;
}

// 入队操作
void enQueue(Queue* q, int value) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = value;
    newNode->next = NULL;

    if (q->rear == NULL) {
        // 队列为空,新节点既是队首也是队尾
        q->front = newNode;
        q->rear = newNode;
    } else {
        // 将新节点添加到队列尾部,并更新队尾指针
        q->rear->next = newNode;
        q->rear = newNode;
    }
}

// 出队操作
int deQueue(Queue* q) {
    if (q->front == NULL) {
        // 队列为空,无法出队
        printf("Queue is empty.\n");
        return -1;
    }

    Node* temp = q->front;
    int value = temp->data;

    if (q->front == q->rear) {
        // 队列只有一个节点,出队后队列为空
        q->front = NULL;
        q->rear = NULL;
    } else {
        // 更新队首指针
        q->front = q->front->next;
    }

    free(temp);
    return value;
}

int main() {
    Queue q;
    initQueue(&q);

    enQueue(&q, 10);
    enQueue(&q, 20);
    enQueue(&q, 30);

    printf("Dequeued item: %d\n", deQueue(&q));
    printf("Dequeued item: %d\n", deQueue(&q));
    printf("Dequeued item: %d\n", deQueue(&q));

    return 0;
}

在上述代码中,我们使用了循环单链表来实现队列操作。Queue结构体包含了指向队首和队尾的指针。initQueue()函数用于初始化队列,enQueue()函数用于入队操作,deQueue()函数用于出队操作。在deQueue()函数中,我们首先检查队列是否为空,如果为空,则输出提示信息;如果不为空,则更新队首指针,释放出队节点的内存,并返回出队的元素值。

main()函数中,我们演示了入队和出队操作的使用。

C语言循环单链表实现队列操作:入队(EnQueue)和出队(DeQueue)详解

原文地址: https://www.cveoy.top/t/topic/VuK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录