数据结构(C语言)算法设计:用设标记来判定循环队列满或队列空,编写入队和出队的算法。
时间: 2024-11-27 14:24:06 浏览: 9
在C语言中,如果要用标记来检测循环队列是否满或空,我们通常会设置一个额外的成员变量`isFull`作为队列是否满的标志,以及一个`isEmpty`标志来表示队列是否为空。以下是一个简单的实现:
```c
#define MAX_SIZE 10
typedef struct {
int data[MAX_SIZE]; // 存储元素
int front; // 队首指针
int rear; // 尾部指针
int isFull; // 标记队列是否满
int isEmpty; // 标记队列是否空
} Queue;
// 初始化队列
void initQueue(Queue *queue) {
queue->front = queue->rear = -1;
queue->isFull = queue->isEmpty = 1; // 初始状态:队列为空且未满
}
// 检查队列状态
bool isQueueEmpty(const Queue *queue) {
return queue->isEmpty;
}
bool isQueueFull(const Queue *queue) {
return queue->isFull && queue->front != queue->rear;
}
// 入队操作(enqueue)
void enqueue(Queue *queue, int value) {
if (!isQueueFull(queue)) {
if (queue->front == -1) {
queue->front = 0; // 首次入队
} else {
queue->rear = (queue->rear + 1) % MAX_SIZE; // 循环队列
}
queue->data[queue->rear] = value;
queue->isEmpty = 0;
queue->isFull = queue->rear == queue->front;
} else {
printf("Queue is full.\n");
}
}
// 出队操作(dequeue)
int dequeue(Queue *queue) {
if (isQueueEmpty(queue)) {
printf("Queue is empty.\n");
return -1; // 或者抛出异常
} else {
int value = queue->data[queue->front];
if (queue->front == queue->rear) { // 队列仅剩最后一个元素,更新状态
queue->front = queue->rear = -1;
} else {
queue->front = (queue->front + 1) % MAX_SIZE;
}
queue->isEmpty = queue->front == queue->rear;
queue->isFull = 0;
return value;
}
}
```
阅读全文