如果用一个循环数组表示队列,并且只设队列头指针Front,不设尾指针Rear,而是另设Count记录队列中元素个数。请用c语言编写代码实现队列的入队和出队操作。
时间: 2024-09-22 18:09:00 浏览: 84
51单片机的FIFO(先入先出)循环队列实现
当你使用循环数组表示队列,可以简化数据结构,因为不需要专门的尾指针。以下是C语言的基本操作:
```c
#include <stdio.h>
typedef struct {
int capacity; // 队列容量
int front; // 队头指针
int count; // 当前元素个数
int data[1]; // 循环数组,第一个元素实际存储的是第0个元素
} Queue;
// 初始化队列
Queue* createQueue(int size) {
Queue* queue = (Queue*)malloc(sizeof(Queue));
queue->capacity = size;
queue->front = -1;
queue->count = 0;
return queue;
}
// 入队(enqueue)
void enqueue(Queue* queue, int value) {
if (queue->count == queue->capacity) { // 队列满
printf("Queue is full.\n");
return;
}
queue->data[(queue->front + queue->count) % queue->capacity] = value;
queue->front = (queue->front + 1) % queue->capacity; // 更新队头指针
queue->count++;
}
// 出队(dequeue)
int dequeue(Queue* queue) {
if (queue->count == 0) { // 队列空
printf("Queue is empty.\n");
return -1; // 或者返回一个特殊值表示失败
}
int value = queue->data[queue->front];
queue->front = (queue->front + 1) % queue->capacity; // 更新队头指针
queue->count--;
return value;
}
// 示例用法
int main() {
Queue* q = createQueue(5);
enqueue(q, 1);
enqueue(q, 2);
printf("Dequeued: %d\n", dequeue(q)); // 输出: Dequeued: 1
return 0;
}
```
阅读全文