#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct QueueNode {
int data;
struct QueueNode* next;
} QueueNode;
typedef struct {
QueueNode* front;
QueueNode* rear;
} LinkedQueue;
LinkedQueue* initQueue() {
LinkedQueue* Q = (LinkedQueue*)malloc(sizeof(LinkedQueue));
Q->front = Q->rear = NULL;
return Q;
}
bool queueEmpty(LinkedQueue* Q) {
return Q->front == NULL;
}
void enqueue(LinkedQueue* Q, int e) {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = e;
newNode->next = NULL;
if (queueEmpty(Q)) {
Q->front = Q->rear = newNode;
} else {
Q->rear->next = newNode;
Q->rear = newNode;
}
}
int dequeue(LinkedQueue* Q) {
if (queueEmpty(Q)) {
return -1; // 表示队列为空
}
int e = Q->front->data;
QueueNode* temp = Q->front;
Q->front = Q->front->next;
free(temp);
return e;
}
void freeQueue(LinkedQueue* Q) {
while (Q->front != NULL) {
QueueNode* temp = Q->front;
Q->front = Q->front->next;
free(temp);
}
free(Q);
}
int main() {
LinkedQueue* queue = initQueue();
printf("Enqueuing elements into the queue:\n");
enqueue(queue, 10);
enqueue(queue, 20);
enqueue(queue, 30);
printf("Dequeuing elements from the queue: ");
while (!queueEmpty(queue)) {
int e = dequeue(queue);
printf("%d ", e);
}
printf("\n");
freeQueue(queue);
return 0;
}
链式队列的基本操作
于 2023-08-17 09:02:31 首次发布