用C语言写出循环队列中利用count记录队中元素个数/设置标志位flag来区分队空/队满,实现基本操作
时间: 2024-11-20 22:42:54 浏览: 27
在C语言中,我们可以使用数组来实现一个循环队列,并通过一个计数器`count`来跟踪队列中元素的数量,同时维护一个标志位`flag`来表示队列的状态(空、满)。下面是一个简单的循环队列结构以及基本操作的示例:
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int front; // 队首元素索引
int rear; // 队尾元素索引
int count;
int flag; // 0 表示队列为空,1 表示队列已满
} Queue;
// 初始化循环队列
void initQueue(Queue *q) {
q->front = -1;
q->rear = -1;
q->count = 0;
q->flag = 0;
}
// 入队操作(如果队未满)
void enqueue(Queue *q, int value) {
if (q->count < MAX_SIZE && q->rear != (q->front + MAX_SIZE - 1) % MAX_SIZE) { // 判断队尾不是最右边
q->rear = (q->rear + 1) % MAX_SIZE;
q->data[q->rear] = value;
q->count++;
if (q->count == MAX_SIZE) {
q->flag = 1; // 队列满
}
} else {
printf("Queue is full.\n");
}
}
// 出队操作(如果队非空)
int dequeue(Queue *q) {
if (q->count > 0) {
if (q->front == q->rear) { // 队列为空
q->flag = 0;
} else {
int removedValue = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
q->count--;
return removedValue; // 返回出队元素
}
} else {
printf("Queue is empty.\n");
return -1; // 返回错误码
}
}
// 检查队列状态
void checkQueueStatus(Queue *q) {
printf("Queue status: Count = %d, Flag (empty/full) = %d\n", q->count, q->flag);
}
int main() {
Queue queue;
initQueue(&queue);
// 使用enqueue和dequeue操作,检查队列状态
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
checkQueueStatus(&queue); // 应该输出:Count = 3, Flag = 1
dequeue(&queue);
dequeue(&queue);
checkQueueStatus(&queue); // 应该输出:Count = 1, Flag = 1
return 0;
}
```
在这个例子中,我们创建了一个`Queue`结构,包含了数据数组`data`、队首指针`front`、队尾指针`rear`、元素数量`count`和状态标志`flag`。`enqueue` 和 `dequeue`函数分别处理入队和出队操作,而`checkQueueStatus`用于查看当前队列的状态。
阅读全文