循环队列
#ifndef ROUND_ROBIN_QUEUE_H
#define ROUND_ROBIN_QUEUE_H
#include <stdbool.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE]; // 存放数据
int front; // 队首指针
int rear; // 队尾指针
int size; // 队列大小
} RoundRobinQueue;
RoundRobinQueue* initQueue();
bool isEmpty(RoundRobinQueue* queue);
bool isFull(RoundRobinQueue* queue);
void enqueue(RoundRobinQueue* queue, int value);
int dequeue(RoundRobinQueue* queue);
void printQueue(RoundRobinQueue* queue);
#endif // ROUND_ROBIN_QUEUE_H
#include "round_robinqueue.h"
#include <stdio.h>
#include <stdlib.h>
RoundRobinQueue* initQueue() {
RoundRobinQueue* queue = (RoundRobinQueue*)malloc(sizeof(RoundRobinQueue));
if (!queue) {
printf("Memory allocation failed!\n");
return NULL;
}
queue->front = -1;
queue->rear = -1;
queue->size = 0;
return queue;
}
bool isEmpty(RoundRobinQueue* queue) {
return queue->front == -1;
}
bool isFull(RoundRobinQueue* queue) {
return (queue->rear + 1) % MAXSIZE == queue->front;
}
void enqueue(RoundRobinQueue* queue, int value) {
if (isFull(queue)) {
printf("Queue is full!\n");
return;
}
if (queue->front == -1) {
queue->front = 0;
}
queue->rear = (queue->rear + 1) % MAXSIZE;
queue->data[queue->rear] = value;
queue->size++;
}
int dequeue(RoundRobinQueue* queue) {
if (isEmpty(queue)) {
printf("Queue is empty!\n");
return -1;
}
int value = queue->data[queue->front];
if (queue->front == queue->rear) {
queue->front = -1;
queue->rear = -1;
}
else {
queue->front = (queue->front + 1) % MAXSIZE;
}
queue->size--;
return value;
}
void printQueue(RoundRobinQueue* queue) {
if (isEmpty(queue)) {
printf("Queue is empty!\n");
return;
}
int i = queue->front;
while (i != queue->rear) {
printf("%d ", queue->data[i]);
i = (i + 1) % MAXSIZE;
}
printf("%d\n", queue->data[queue->rear]);
}