数据结构队列代码c语言
以下是一个简单的队列数据结构的C语言代码示例:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int front;
int rear;
} Queue;
void initQueue(Queue *queue) {
queue->front = 0;
queue->rear = 0;
}
int isEmpty(Queue *queue) {
return queue->front == queue->rear;
}
int isFull(Queue *queue) {
return (queue->rear + 1) % MAX_SIZE == queue->front;
}
void enqueue(Queue *queue, int value) {
if (isFull(queue)) {
printf("Queue is full.\n");
return;
}
queue->data[queue->rear] = value;
queue->rear = (queue->rear + 1) % MAX_SIZE;
}
int dequeue(Queue *queue) {
if (isEmpty(queue)) {
printf("Queue is empty.\n");
return -1;
}
int value = queue->data[queue->front];
queue->front = (queue->front + 1) % MAX_SIZE;
return value;
}
int main() {
Queue queue;
initQueue(&queue);
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
printf("Dequeued: %d\n", dequeue(&queue));
printf("Dequeued: %d\n", dequeue(&queue));
printf("Dequeued: %d\n", dequeue(&queue));
printf("Dequeued: %d\n", dequeue(&queue));
return 0;
}
这个代码示例中,我们使用一个数组来实现队列,通过front
和rear
两个指针来标记队列的头部和尾部。initQueue
函数用于初始化队列,isEmpty
和isFull
函数用于判断队列是否为空或已满。enqueue
函数用于入队操作,将元素添加到队列的尾部,dequeue
函数用于出队操作,从队列的头部取出一个元素。在main
函数中,我们演示了如何使用队列进行入队和出队操作。
当队列满时,我们使用取模运算将rear
指针回绕到数组的开头,以实现循环队列的效果。这样可以最大限度地利用数组空间。
在enqueue
函数中,我们首先检查队列是否已满。如果队列已满,则打印出队列已满的消息并返回。否则,我们将要入队的元素存储在rear
指针所指向的位置,并将rear
指针向后移动一位。
在dequeue
函数中,我们首先检查队列是否为空。如果队列为空,则打印出队列为空的消息并返回一个特殊值(在这里我们选择返回-1)。否则,我们将front
指针所指向的元素取出,并将front
指针向后移动一位。
在main
函数中,我们首先调用initQueue
函数来初始化队列。然后,我们使用enqueue
函数将三个元素(1、2和3)依次入队。接下来,我们使用dequeue
函数依次出队并打印出队的元素。由于队列是先进先出的,所以我们得到的输出应该是1、2和3。
这个代码示例只是一个简单的队列实现,还可以根据实际需求进行扩展和优化。例如,可以添加一个size
变量来记录队列中的元素个数,以便更方便地判断队列是否为空或已满。还可以添加其他操作,如获取队列的长度、获取队列的头部元素等。