用C语言设计一个环形队列,用front和rear分别为表示为队头指针和队尾指针,用flag表示队列可能为空(0)还是可能为满(1)的情况,当front==rear时队列为满,要求设计队列的出列和入列算法
时间: 2024-05-04 09:22:46 浏览: 79
Sure, 我可以回答您的问题。
以下是用C语言设计环形队列的示例代码:
```
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int front; // 队头指针
int rear; // 队尾指针
int flag; // 队列状态:0-空;1-满
} CircularQueue;
// 初始化队列
void init(CircularQueue *queue) {
queue->front = 0;
queue->rear = 0;
queue->flag = 0;
}
// 入列操作
int enqueue(CircularQueue *queue, int item) {
if (queue->flag && queue->front == queue->rear) { // 队列已满
printf("队列已满,无法入列!\n");
return 0;
}
queue->data[queue->rear] = item;
queue->rear = (queue->rear + 1) % MAX_SIZE; // 环形队列
if (queue->rear == queue->front) { // 队列已满
queue->flag = 1;
}
return 1;
}
// 出列操作
int dequeue(CircularQueue *queue, int *item) {
if (!queue->flag && queue->front == queue->rear) { // 队列已空
printf("队列已空,无法出列!\n");
return 0;
}
*item = queue->data[queue->front];
queue->front = (queue->front + 1) % MAX_SIZE; // 环形队列
if (queue->front == queue->rear) { // 队列已空
queue->flag = 0;
}
return 1;
}
```
请注意,此代码仅作为示例,可能存在一些问题,例如队列容量固定为MAX_SIZE,无法动态扩展等。
如果您有任何其他问题,可以继续向我提出。
阅读全文