C语言实现队列
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef int QueueElementType;
typedef struct QueueNode {
QueueElementType data;
struct QueueNode *next;
} QueueNode;
typedef struct Queue {
int size;
QueueNode *front;
QueueNode *rear;
} Queue;
Queue *CreateQueue()
{
Queue *queue = (Queue *)malloc(sizeof(Queue));
queue->size = 0;
queue->front = NULL;
queue->rear = NULL;
return queue;
}
bool IsEmptyQueue(Queue *queue)
{
if (queue->front == NULL) {
return true;
}
return false;
}
void PushQueue(QueueElementType data, Queue *queue)
{
QueueNode *queueNode = (QueueNode *)malloc(sizeof(QueueNode));
queueNode->data = data;
queueNode->next = NULL;
if (IsEmptyQueue(queue)) {
queue->front = queueNode;
} else {
queue->rear->next = queueNode;
}
queue->size += 1;
queue->rear = queueNode;
return;
}
void PopQueue(Queue *queue)
{
QueueNode *queueNode = NULL;
if (IsEmptyQueue(queue) == true) {
return;
}
queue->size -= 1;
queueNode = queue->front;
queue->front = queue->front->next;
free(queueNode);
queueNode = NULL;
}
QueueElementType GetFront(Queue *queue)
{
if (IsEmptyQueue(queue) == false) {
return queue->front->data;
}
return 0;
}
void CleanQueue(Queue *queue)
{
QueueNode *queueNode = queue->front;
QueueNode *queueTempNode = NULL;
while (queueNode != NULL) {
queue->size -= 1;
queueTempNode = queueNode->next;
free(queueNode);
queueNode = queueTempNode;
}
queue->front = queueNode;
queue->rear = queueNode;
}
void TraverseQueue(Queue *queue)
{
QueueNode *queueNode = queue->front;
if (IsEmptyQueue(queue) == true) {
return;
}
while (queueNode != NULL) {
printf("%d ", queueNode->data);
queueNode = queueNode->next;
}
printf("\n");
}
int main()
{
Queue *queue = CreateQueue();
PushQueue(1, queue);
PushQueue(2, queue);
PushQueue(3, queue);
PushQueue(4, queue);
PushQueue(5, queue);
PushQueue(6, queue);
TraverseQueue(queue);
}