菜鸟的博客

纵有疾风起,人生不言弃。

导航

队列

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

// 队列结点的定义
typedef struct QNode {
    int data;
    struct QNode* next;
} QNode;

// 链式队列的定义
typedef struct {
    QNode* front; // 队头指针
    QNode* rear;  // 队尾指针
} LinkedQueue;

// 初始化链式队列
void InitQueue(LinkedQueue* queue) {
    queue->front = queue->rear = NULL;
}

// 入队
void Enqueue(LinkedQueue* queue, int data) {
    QNode* newNode = (QNode*)malloc(sizeof(QNode));
    if (newNode == NULL) {
        printf("内存分配失败\n");
        exit(EXIT_FAILURE);
    }
    newNode->data = data;
    newNode->next = NULL;

    if (queue->rear == NULL) {
        // 空队列,插入第一个元素
        queue->front = queue->rear = newNode;
    }
    else {
        // 队尾插入新结点
        queue->rear->next = newNode;
        queue->rear = newNode;
    }
}

// 出队
int Dequeue(LinkedQueue& Q) {
    if (Q.front == NULL) {
        printf("队列为空,无法出队\n");
        exit(EXIT_FAILURE);
    }

    QNode* p = Q.front;
    int data = p->data;

    Q.front = p->next;
    free(p);

    // 如果出队后队列为空,更新队尾指针
    if (Q.front == NULL) {
        Q.rear = NULL;
    }

    return data;
}

int main() {
    LinkedQueue queue;
    InitQueue(&queue);

    // 入队操作
    Enqueue(&queue, 1);
    Enqueue(&queue, 2);
    Enqueue(&queue, 3);

    // 出队操作
    int data = Dequeue(queue);
    printf("出队元素:%d\n", data);

    return 0;
}

 

posted on 2023-11-15 22:23  hhmzd233  阅读(3)  评论(0编辑  收藏  举报