C语言循环队列基本操作实现
时间: 2024-09-24 22:17:49 浏览: 60
C语言循环队列的表示与实现实例详解
5星 · 资源好评率100%
在C语言中,循环队列是一种线性数据结构,它在队列的基础上添加了一个特性,即当队列满时,新元素会从队列头部开始插入,而当队列为空时,删除元素时会自动指向队列尾部。以下是循环队列的基本操作实现:
1. **初始化**:
```c
#define MAX_SIZE 100
typedef struct {
int front; // 队头指针
int rear; // 队尾指针
int data[MAX_SIZE]; // 存储数据的数组
} Queue;
void init(Queue* queue) {
queue->front = -1;
queue->rear = -1;
}
```
2. **判断队列是否为空/满**:
```c
bool is_empty(Queue* queue) {
return queue->front == -1 && queue->rear == -1;
}
bool is_full(Queue* queue, int size) {
return (queue->front + 1) % size == queue->rear;
}
```
3. **入队(enqueue)**:
```c
void enqueue(Queue* queue, int value) {
if (is_full(queue, MAX_SIZE)) {
printf("Queue is full.\n");
return;
}
if (is_empty(queue)) {
queue->front = 0;
}
queue->rear = (queue->rear + 1) % MAX_SIZE;
queue->data[queue->rear] = value;
}
```
4. **出队(dequeue)**:
```c
int dequeue(Queue* queue) {
if (is_empty(queue)) {
printf("Queue is empty.\n");
return -1; // 或者抛异常
}
int value = queue->data[queue->front];
if (queue->front == queue->rear) {
queue->front = queue->rear = -1; // 队列空置
} else {
queue->front = (queue->front + 1) % MAX_SIZE;
}
return value;
}
```
5. **查看队首元素(peek)**:
```c
int peek(Queue* queue) {
if (is_empty(queue)) {
printf("Queue is empty.\n");
return -1; // 或者抛异常
}
return queue->data[queue->front];
}
```
阅读全文