用C语言实现顺序队列的初始化,入队列,出队列,判断队列满或队空等基本操作(及运行结果和必要的解释)
时间: 2024-11-04 07:12:04 浏览: 52
判断队列满和空-C语言栈和队列
在C语言中,我们可以使用数组来实现简单的顺序队列数据结构。以下是关键操作的代码示例:
```c
#include <stdio.h>
#define MAX_SIZE 10 // 队列的最大容量
typedef struct {
int data[MAX_SIZE]; // 存储队列元素
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 初始化队列
void init(Queue *queue) {
queue->front = -1;
queue->rear = -1;
}
// 判断队列是否为空
int is_empty(const Queue *queue) {
return queue->front == -1 && queue->rear == -1;
}
// 判断队列是否已满
int is_full(const Queue *queue) {
return (queue->front + 1) % MAX_SIZE == queue->rear;
}
// 入队(enqueue)
void enqueue(Queue *queue, int value) {
if (is_full(queue)) {
printf("Queue is full.\n");
return;
}
if (is_empty(queue)) {
queue->front = 0;
} else {
queue->rear = (queue->rear + 1) % MAX_SIZE;
}
queue->data[queue->rear] = value;
printf("Enqueued %d at position %d\n", value, queue->rear);
}
// 出队(dequeue)
int dequeue(Queue *queue) {
if (is_empty(queue)) {
printf("Queue is empty.\n");
return -1; // 返回一个特殊值表示队列为空
}
int removed_value = queue->data[queue->front];
if (queue->front == queue->rear) {
queue->front = queue->rear = -1;
} else {
queue->front = (queue->front + 1) % MAX_SIZE;
}
printf("Dequeued %d from position %d\n", removed_value, queue->front);
return removed_value;
}
int main() {
Queue q;
init(&q);
enqueue(&q, 1); // 应该成功
enqueue(&q, 2); // 应该成功
enqueue(&q, 3); // 如果此时队列已满,则提示全并保持前两个元素
dequeue(&q); // 应该弹出1,然后返回1
dequeue(&q); // 应该弹出2,然后返回2
dequeue(&q); // 如果此时队列为空,应提示空并返回-1
return 0;
}
```
这个程序首先定义了一个顺序队列结构体,包含数组、队头指针和队尾指针。初始化函数设置队头和队尾指针都为-1,代表队列为空。后续的操作如入队、出队、检查队列状态都是基于这些变量来进行的。
在`main()`函数中演示了这些操作,例如尝试向已满的队列插入元素会显示队列已满,而从空队列中删除元素会显示队列为空,并返回特殊值。
阅读全文