C语言实现高效循环队列
时间: 2024-05-23 18:07:36 浏览: 123
C语言中实现高效循环队列需要注意以下几点:
1. 循环队列的头尾指针需要特殊处理,当头指针和尾指针相遇时,需要进行特殊处理。
2. 循环队列的大小需要预先确定,一旦确定就不能改变。
3. 循环队列中最多只能容纳 (队列大小 - 1) 个元素,因为需要一个空位来判断队列是否为空或已满。
4. 循环队列的入队和出队操作都需要特殊处理,具体可以根据头尾指针的位置关系和队列大小进行判断。
以下是一个基于数组实现的高效循环队列的示例代码:
```c
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int head;
int tail;
} MyCircularQueue;
MyCircularQueue* myCircularQueueCreate(int k) {
MyCircularQueue *queue = (MyCircularQueue *)malloc(sizeof(MyCircularQueue));
queue->head = 0;
queue->tail = 0;
return queue;
}
bool myCircularQueueIsEmpty(MyCircularQueue* obj) {
return (obj->head == obj->tail);
}
bool myCircularQueueIsFull(MyCircularQueue* obj) {
return ((obj->tail + 1) % MAX_SIZE == obj->head);
}
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {
if (myCircularQueueIsFull(obj)) {
return false;
}
obj->data[obj->tail] = value;
obj->tail = (obj->tail + 1) % MAX_SIZE;
return true;
}
bool myCircularQueueDeQueue(MyCircularQueue* obj) {
if (myCircularQueueIsEmpty(obj)) {
return false;
}
obj->head = (obj->head + 1) % MAX_SIZE;
return true;
}
int myCircularQueueFront(MyCircularQueue* obj) {
if (myCircularQueueIsEmpty(obj)) {
return -1;
}
return obj->data[obj->head];
}
int myCircularQueueRear(MyCircularQueue* obj) {
if (myCircularQueueIsEmpty(obj)) {
return -1;
}
return obj->data[(obj->tail - 1 + MAX_SIZE) % MAX_SIZE];
}
void myCircularQueueFree(MyCircularQueue* obj) {
free(obj);
}
```
阅读全文