实现循环队列初始化、入队、出队的完整C语言源代码
时间: 2023-10-02 15:03:40 浏览: 142
数据结构与算法C++实现 循环顺序队列的初始化,求长度,入队,出队
5星 · 资源好评率100%
以下是循环队列的完整C语言实现,包括初始化、入队、出队等操作:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 5 // 队列的最大容量
// 循环队列结构体
typedef struct {
int *data; // 数据存储区
int front; // 队首指针
int rear; // 队尾指针
int size; // 队列当前元素个数
} CircularQueue;
// 初始化循环队列
void initQueue(CircularQueue *queue) {
queue->data = (int *)malloc(sizeof(int) * MAX_SIZE);
queue->front = 0;
queue->rear = 0;
queue->size = 0;
}
// 判断队列是否为空
int isEmpty(CircularQueue *queue) {
return queue->size == 0;
}
// 判断队列是否已满
int isFull(CircularQueue *queue) {
return queue->size == MAX_SIZE;
}
// 入队
void enqueue(CircularQueue *queue, int value) {
if (isFull(queue)) {
printf("Queue is full.\n");
return;
}
queue->data[queue->rear] = value;
queue->rear = (queue->rear + 1) % MAX_SIZE;
queue->size++;
}
// 出队
void dequeue(CircularQueue *queue) {
if (isEmpty(queue)) {
printf("Queue is empty.\n");
return;
}
queue->front = (queue->front + 1) % MAX_SIZE;
queue->size--;
}
// 获取队首元素
int front(CircularQueue *queue) {
if (isEmpty(queue)) {
printf("Queue is empty.\n");
return -1;
}
return queue->data[queue->front];
}
// 获取队尾元素
int rear(CircularQueue *queue) {
if (isEmpty(queue)) {
printf("Queue is empty.\n");
return -1;
}
int index = (queue->rear - 1 + MAX_SIZE) % MAX_SIZE;
return queue->data[index];
}
// 输出队列中的所有元素
void printQueue(CircularQueue *queue) {
if (isEmpty(queue)) {
printf("Queue is empty.\n");
return;
}
printf("Queue: ");
int i;
for (i = queue->front; i != queue->rear; i = (i + 1) % MAX_SIZE) {
printf("%d ", queue->data[i]);
}
printf("\n");
}
int main() {
CircularQueue queue;
initQueue(&queue);
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
enqueue(&queue, 4);
enqueue(&queue, 5); // 队列已满,无法入队
printQueue(&queue); // 队列: 1 2 3 4
dequeue(&queue);
dequeue(&queue);
printQueue(&queue); // 队列: 3 4
int frontValue = front(&queue);
printf("Front value: %d\n", frontValue); // Front value: 3
int rearValue = rear(&queue);
printf("Rear value: %d\n", rearValue); // Rear value: 4
return 0;
}
```
阅读全文