C语言实现队列
在 C 语言中,可以使用数组或链表来实现队列。下面分别介绍这两种实现方式。
1. 使用数组实现
#include <stdio.h>
#define MAX_SIZE 100
typedef struct
{
int data[MAX_SIZE];
int front;
int rear;
} Queue;
void initQueue(Queue* queue)
{
queue->front = -1;
queue->rear = -1;
}
int isFull(Queue* queue)
{
return (queue->rear == MAX_SIZE - 1);
}
int isEmpty(Queue* queue)
{
return (queue->front == -1);
}
void enqueue(Queue* queue, int item)
{
if (isFull(queue))
{
printf("Queue is full.\n");
return;
}
if (isEmpty(queue))
{
queue->front = 0;
}
queue->rear++;
queue->data[queue->rear] = item;
}
int dequeue(Queue* queue)
{
if (isEmpty(queue))
{
printf("Queue is empty.\n");
return -1;
}
int item = queue->data[queue->front];
queue->front++;
if (queue->front > queue->rear)
{
queue->front = -1;
queue->rear = -1;
}
return item;
}
int main()
{
Queue queue;
initQueue(&queue);
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
printf("%d\n", dequeue(&queue)); //输出1
printf("%d\n", dequeue(&queue)); //输出2
printf("%d\n", dequeue(&queue)); //输出3
printf("%d\n", dequeue(&queue)); //队列为空,输出-1
return 0;
}
2. 使用链表实现
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int data;
struct Node* next;
} Node;
typedef struct
{
Node* front;
Node* rear;
} Queue;
void initQueue(Queue* queue)
{
queue->front = NULL;
queue->rear = NULL;
}
int isEmpty(Queue* queue)
{
return (queue->front == NULL);
}
void enqueue(Queue* queue, int item)
{
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = item;
newNode->next = NULL;
if (isEmpty(queue))
{
queue->front = newNode;
queue->rear = newNode;
}
else
{
queue->rear->next = newNode; //将新节点追加到队列尾部
queue->rear = queue->rear->next; //更新rear指针
}
}
int dequeue(Queue* queue)
{
if (isEmpty(queue))
{
printf("Queue is empty.\n");
return -1;
}
int item = queue->front->data;
Node* temp = queue->front;
queue->front = queue->front->next;
free(temp); //释放原队列头节点的内存
if (queue->front == NULL)
{
queue->rear = NULL;
}
return item;
}
int main()
{
Queue queue;
initQueue(&queue);
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
printf("%d\n", dequeue(&queue)); //输出1
printf("%d\n", dequeue(&queue)); //输出2
printf("%d\n", dequeue(&queue)); //输出3
printf("%d\n", dequeue(&queue)); //队列为空,输出-1
return 0;
}