链队列
link_queue.h
#ifndef QUEUE_H
#define QUEUE_H
typedef struct Node {
int data;
struct Node* next;
} Node;
typedef struct Queue {
Node* front;
Node* rear;
} Queue;
// 创建新节点
Node* createNode(int data);
// 创建新队列
Queue* createQueue();
// 入队
void enqueue(Queue* queue, int data);
// 出队
int dequeue(Queue* queue);
// 判断队列是否为空
int isEmpty(Queue* queue);
#endif // QUEUE_H
link_queue.c
#include "queue.h"
#include <stdlib.h>
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory error\n");
return NULL;
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 创建新队列
Queue* createQueue() {
Queue* queue = (Queue*)malloc(sizeof(Queue));
if (!queue) {
printf("Memory error\n");
return NULL;
}
queue->front = queue->rear = NULL;
return queue;
}
// 入队
void enqueue(Queue* queue, int data) {
Node* newNode = createNode(data);
if (isEmpty(queue)) {
queue->front = queue->rear = newNode;
} else {
queue->rear->next = newNode;
queue->rear = newNode;
}
}
// 出队
int dequeue(Queue* queue) {
if (isEmpty(queue)) {
printf("Queue is empty\n");
return -1;
}
Node* temp = queue->front;
int data = temp->data;
queue->front = queue->front->next;
if (queue->front == NULL) {
queue->rear = NULL;
}
free(temp);
return data;
}
// 判断队列是否为空
int isEmpty(Queue* queue) {
return queue->front == NULL;
}
main.c
#include <stdio.h>
#include "queue.h"
int main() {
Queue* queue = createQueue();
enqueue(queue, 1);
enqueue(queue, 2);
enqueue(queue, 3);
printf("%d ", dequeue(queue)); // 输出:1
printf("%d ", dequeue(queue)); // 输出:2
printf("%d ", dequeue(queue)); // 输出:3
return 0;
}