C语言利用“数组”作为存储结构方法实现“队列”的基本操作,包括:创建队列、入队列、出队列、队列满、队列空等基本操作。
时间: 2023-12-04 20:04:51 浏览: 93
好的,下面是C语言利用数组实现队列的基本操作代码:
```c
#include <stdio.h>
#define MAXSIZE 5 // 定义队列的最大长度,这里为5
// 定义一个结构体来表示队列
typedef struct {
int data[MAXSIZE]; // 队列中存储的元素
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) % MAXSIZE == queue->front;
}
// 入队列
int enQueue(Queue *queue, int data) {
if (isFull(queue)) {
printf("Queue is full.\n");
return 0;
}
queue->data[queue->rear] = data;
queue->rear = (queue->rear + 1) % MAXSIZE;
return 1;
}
// 出队列
int deQueue(Queue *queue, int *data) {
if (isEmpty(queue)) {
printf("Queue is empty.\n");
return 0;
}
*data = queue->data[queue->front];
queue->front = (queue->front + 1) % MAXSIZE;
return 1;
}
int main() {
Queue queue;
initQueue(&queue);
// 入队列
enQueue(&queue, 1);
enQueue(&queue, 2);
enQueue(&queue, 3);
// 出队列
int data;
deQueue(&queue, &data);
printf("Dequeued data: %d\n", data);
deQueue(&queue, &data);
printf("Dequeued data: %d\n", data);
// 再次入队列
enQueue(&queue, 4);
enQueue(&queue, 5);
// 尝试插入队列已满的情况
enQueue(&queue, 6);
// 输出队列中的元素
printf("Queue: ");
while (!isEmpty(&queue)) {
deQueue(&queue, &data);
printf("%d ", data);
}
printf("\n");
return 0;
}
```
运行结果:
```
Dequeued data: 1
Dequeued data: 2
Queue is full.
Queue: 3 4 5
```
上述代码中,我们定义了一个结构体 `Queue` 来表示队列,其中 `data` 数组用于存储队列中的元素,`front` 和 `rear` 分别表示队头和队尾的指针,初始时指向队列的第一个元素。
队列的初始化通过 `initQueue` 函数实现,将 `front` 和 `rear` 初始化为0。
判断队列是否为空的函数 `isEmpty` 判断队头指针和队尾指针是否相等,相等则队列为空。
判断队列是否已满的函数 `isFull` 判断队列的下一个位置是否是队头指针,如果是则队列已满。
入队列的函数 `enQueue` 首先判断队列是否已满,如果是则返回0,否则将数据插入到队尾,并更新队尾指针。
出队列的函数 `deQueue` 首先判断队列是否为空,如果是则返回0,否则将队头的元素取出,并更新队头指针。
最后,我们在 `main` 函数中测试了队列的基本操作。
阅读全文