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