#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;
}