数据结构队列代码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;
}

这个代码示例中,我们使用一个数组来实现队列,通过frontrear两个指针来标记队列的头部和尾部。initQueue函数用于初始化队列,isEmptyisFull函数用于判断队列是否为空或已满。enqueue函数用于入队操作,将元素添加到队列的尾部,dequeue函数用于出队操作,从队列的头部取出一个元素。在main函数中,我们演示了如何使用队列进行入队和出队操作。

当队列满时,我们使用取模运算将rear指针回绕到数组的开头,以实现循环队列的效果。这样可以最大限度地利用数组空间。

enqueue函数中,我们首先检查队列是否已满。如果队列已满,则打印出队列已满的消息并返回。否则,我们将要入队的元素存储在rear指针所指向的位置,并将rear指针向后移动一位。

dequeue函数中,我们首先检查队列是否为空。如果队列为空,则打印出队列为空的消息并返回一个特殊值(在这里我们选择返回-1)。否则,我们将front指针所指向的元素取出,并将front指针向后移动一位。

main函数中,我们首先调用initQueue函数来初始化队列。然后,我们使用enqueue函数将三个元素(1、2和3)依次入队。接下来,我们使用dequeue函数依次出队并打印出队的元素。由于队列是先进先出的,所以我们得到的输出应该是1、2和3。

这个代码示例只是一个简单的队列实现,还可以根据实际需求进行扩展和优化。例如,可以添加一个size变量来记录队列中的元素个数,以便更方便地判断队列是否为空或已满。还可以添加其他操作,如获取队列的长度、获取队列的头部元素等。