用c语言写个简单的队列
时间: 2023-09-14 16:07:41 浏览: 44
好的,下面是一个简单的队列的实现,使用C语言编写:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10 // 队列的最大长度
typedef struct Queue {
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;
}
// 打印队列
void printQueue(Queue *queue) {
if (isEmpty(queue)) {
printf("Queue is empty!\n");
return;
}
printf("Queue: ");
int i = queue->front;
while (i != queue->rear) {
printf("%d ", queue->data[i]);
i = (i + 1) % MAX_SIZE;
}
printf("\n");
}
int main() {
Queue queue;
initQueue(&queue);
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
printQueue(&queue);
dequeue(&queue);
printQueue(&queue);
enqueue(&queue, 4);
printQueue(&queue);
dequeue(&queue);
dequeue(&queue);
dequeue(&queue);
dequeue(&queue); // 队列为空,输出提示信息
printQueue(&queue); // 队列为空,输出提示信息
return 0;
}
```
这里我们使用了一个结构体来表示队列,包含了一个固定大小的数组和两个指针,分别指向队首和队尾。队列的最大长度可以通过`#define`定义,这里设置为10。`initQueue`函数用于初始化队列,将队首指针和队尾指针都设置为0。`isEmpty`和`isFull`函数用于判断队列是否为空和已满。`enqueue`函数用于入队,如果队列已满则输出提示信息;否则将元素放到队尾,并将队尾指针向后移动一位。`dequeue`函数用于出队,如果队列为空则输出提示信息;否则将队首元素取出并将队首指针向后移动一位。`printQueue`函数用于打印队列中的元素,如果队列为空则输出提示信息。
在`main`函数中,我们首先初始化队列并依次将1、2、3入队,然后打印队列。接着出队一个元素,再次打印队列。然后将4入队并打印队列。最后连续出队4个元素,此时队列为空,再次打印队列时将输出提示信息。