c语言实现循环队列操作
时间: 2023-11-25 09:07:08 浏览: 93
循环队列的操作和实现C语言 (2).pdf
循环队列是一种特殊的队列,它的队尾可以指向队列的开头,形成一个环状结构。下面是C语言实现循环队列的基本操作:
1. 定义循环队列结构体
```c
typedef struct {
int* arr; // 存放数据
int front; // 队首
int rear; // 队尾
int count; // 队内有效元素
int N; // 循环队列的长度
} MyCircularQueue;
```
2. 创建循环队列
```c
MyCircularQueue* myCircularQueueCreate(int k) {
MyCircularQueue* q = (MyCircularQueue*)malloc(sizeof(MyCircularQueue)); // 申请空间
if (q == NULL) {
return NULL;
}
q->arr = (int*)malloc(sizeof(int) * k); // 申请空间
if (q->arr == NULL) {
return NULL;
}
q->front = 0; // 初始化
q->rear = 0;
q->count = 0; q->N = k;
return q;
}
```
3. 判断循环队列是否为空
```c
bool myCircularQueueIsEmpty(MyCircularQueue* obj) {
return obj->count == 0;
}
```
4. 判断循环队列是否已满
```c
bool myCircularQueueIsFull(MyCircularQueue* obj) {
return obj->count == obj->N;
}
```
5. 入队操作
```c
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {
if (myCircularQueueIsFull(obj)) {
return false;
}
obj->arr[obj->rear] = value;
obj->rear = (obj->rear + 1) % obj->N;
obj->count++;
return true;
}
```
6. 出队操作
```c
bool myCircularQueueDeQueue(MyCircularQueue* obj) {
if (myCircularQueueIsEmpty(obj)) {
return false;
}
obj->front = (obj->front + 1) % obj->N;
obj->count--;
return true;
}
```
7. 获取队首元素
```c
int myCircularQueueFront(MyCircularQueue* obj) {
if (myCircularQueueIsEmpty(obj)) {
return -1;
}
return obj->arr[obj->front];
}
```
8. 获取队尾元素
```c
int myCircularQueueRear(MyCircularQueue* obj) {
if (myCircularQueueIsEmpty(obj)) {
return -1;
}
return obj->arr[(obj->rear - 1 + obj->N) % obj->N];
}
```
阅读全文