C语言实现循环队列并使用tag变量区分空满状态
可以通过增设一个tag变量来区分循环队列是空还是满。
首先,定义一个tag变量,用于标记循环队列的状态。当循环队列为空时,tag的值为0;当循环队列为满时,tag的值为1。
然后,在进行入队和出队操作时,根据队列的状态进行判断和处理。
以下是一个示例的C语言代码实现:
#include <stdio.h>
#define MAX_SIZE 5
typedef struct {
int data[MAX_SIZE];
int front;
int rear;
int tag;
} Queue;
void initQueue(Queue *queue) {
queue->front = 0;
queue->rear = 0;
queue->tag = 0;
}
int isQueueEmpty(Queue *queue) {
return (queue->front == queue->rear && queue->tag == 0);
}
int isQueueFull(Queue *queue) {
return (queue->front == queue->rear && queue->tag == 1);
}
void enqueue(Queue *queue, int value) {
if (isQueueFull(queue)) {
printf('Queue is full. Cannot enqueue.\n');
return;
}
queue->data[queue->rear] = value;
queue->rear = (queue->rear + 1) % MAX_SIZE;
queue->tag = 1;
}
int dequeue(Queue *queue) {
if (isQueueEmpty(queue)) {
printf('Queue is empty. Cannot dequeue.\n');
return -1; // Return a special value to indicate empty queue
}
int value = queue->data[queue->front];
queue->front = (queue->front + 1) % MAX_SIZE;
queue->tag = 0;
return value;
}
int main() {
Queue queue;
initQueue(&queue);
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
enqueue(&queue, 4);
enqueue(&queue, 5);
enqueue(&queue, 6); // Queue is full. Cannot enqueue.
printf('Dequeued value: %d\n', dequeue(&queue)); // Dequeued value: 1
printf('Dequeued value: %d\n', dequeue(&queue)); // Dequeued value: 2
printf('Dequeued value: %d\n', dequeue(&queue)); // Dequeued value: 3
printf('Dequeued value: %d\n', dequeue(&queue)); // Dequeued value: 4
printf('Dequeued value: %d\n', dequeue(&queue)); // Dequeued value: 5
printf('Dequeued value: %d\n', dequeue(&queue)); // Queue is empty. Cannot dequeue.
return 0;
}
在上述代码中,isQueueEmpty()和isQueueFull()函数用于判断队列是否为空和满。enqueue()函数用于入队,dequeue()函数用于出队。在入队和出队操作时,会根据队列的状态更新tag变量的值。当队列为空时,tag的值为0;当队列为满时,tag的值为1。
原文地址: https://www.cveoy.top/t/topic/o7EL 著作权归作者所有。请勿转载和采集!