用C语言实现环形队列算法
时间: 2023-10-23 10:12:06 浏览: 106
基于C和C++实现的嵌入式设备算法库(含PID控制器-哈夫曼编码器-哈希表-环形队列算法实现).zip
以下是一个基于C语言的环形队列算法实现:
```
#include <stdio.h>
#include <stdlib.h>
#define QUEUE_SIZE 5
typedef struct {
int *arr; // 队列数据存储数组
int front; // 队首指针
int rear; // 队尾指针
int size; // 队列元素个数
} CircularQueue;
// 初始化队列
void initQueue(CircularQueue *q) {
q->arr = (int*)malloc(QUEUE_SIZE * sizeof(int));
q->front = 0;
q->rear = 0;
q->size = 0;
}
// 判断队列是否为空
int isEmpty(CircularQueue *q) {
return q->size == 0;
}
// 判断队列是否已满
int isFull(CircularQueue *q) {
return q->size == QUEUE_SIZE;
}
// 入队
void enqueue(CircularQueue *q, int val) {
if (isFull(q)) {
printf("Queue is full. Enqueue failed.\n");
return;
}
q->arr[q->rear] = val;
q->rear = (q->rear + 1) % QUEUE_SIZE;
q->size++;
}
// 出队
int dequeue(CircularQueue *q) {
if (isEmpty(q)) {
printf("Queue is empty. Dequeue failed.\n");
return -1;
}
int val = q->arr[q->front];
q->front = (q->front + 1) % QUEUE_SIZE;
q->size--;
return val;
}
// 获取队列长度
int getSize(CircularQueue *q) {
return q->size;
}
// 打印队列元素
void printQueue(CircularQueue *q) {
if (isEmpty(q)) {
printf("Queue is empty. No element to print.\n");
return;
}
printf("Queue elements: ");
for (int i = q->front; i != q->rear; i = (i + 1) % QUEUE_SIZE) {
printf("%d ", q->arr[i]);
}
printf("\n");
}
int main() {
CircularQueue q;
initQueue(&q);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
enqueue(&q, 4);
enqueue(&q, 5);
printQueue(&q);
dequeue(&q);
dequeue(&q);
printQueue(&q);
enqueue(&q, 6);
enqueue(&q, 7);
printQueue(&q);
return 0;
}
```
这个实现中,定义了一个`CircularQueue`结构体表示环形队列。在初始化队列时,动态分配一个数组来存储队列元素,并将队首、队尾指针和队列元素个数初始化为0。入队时,先判断队列是否已满,如果已满则提示失败;否则将新元素插入队尾,并将队尾指针向后移动一个位置(如果到达数组末尾则回到数组头),同时队列元素个数加1。出队时,先判断队列是否为空,如果为空则提示失败;否则取出队首元素,将队
阅读全文