6-2 循环队列操作集,用C语言写
时间: 2024-05-19 12:14:47 浏览: 69
//定义循环队列结构体
typedef struct {
int *data; //存储队列元素的数组
int front; //队头指针
int rear; //队尾指针
int size; //队列大小
} CircularQueue;
//初始化循环队列
void initCircularQueue(CircularQueue *q, int size) {
q->data = (int*)malloc(sizeof(int)*size);
q->front = q->rear = 0;
q->size = size;
}
//判断循环队列是否为空
int isCircularQueueEmpty(CircularQueue *q) {
return q->front == q->rear;
}
//判断循环队列是否已满
int isCircularQueueFull(CircularQueue *q) {
return (q->rear+1)%q->size == q->front;
}
//入队
int enqueue(CircularQueue *q, int value) {
if (isCircularQueueFull(q)) {
return 0; //队列已满,入队失败
}
q->data[q->rear] = value;
q->rear = (q->rear+1)%q->size;
return 1; //入队成功
}
//出队
int dequeue(CircularQueue *q, int *value) {
if (isCircularQueueEmpty(q)) {
return 0; //队列为空,出队失败
}
*value = q->data[q->front];
q->front = (q->front+1)%q->size;
return 1; //出队成功
}
//获取队头元素
int getFront(CircularQueue *q, int *value) {
if (isCircularQueueEmpty(q)) {
return 0; //队列为空,获取队头元素失败
}
*value = q->data[q->front];
return 1; //获取队头元素成功
}
//获取队列长度
int getCircularQueueLength(CircularQueue *q) {
return (q->rear - q->front + q->size) % q->size;
}
//清空循环队列
void clearCircularQueue(CircularQueue *q) {
q->front = q->rear = 0;
}
阅读全文