帮我写一个循环队列c语言代码,实现从20个数据中取出众数
时间: 2024-05-05 15:18:09 浏览: 92
好的,以下是一个简单的循环队列的 C 语言代码实现:
```c
#include <stdio.h>
#define MAX_SIZE 20
// 循环队列结构体
typedef struct queue {
int data[MAX_SIZE];
int front;
int rear;
} Queue;
// 初始化循环队列
void initQueue(Queue *q) {
q->front = 0;
q->rear = 0;
}
// 判断循环队列是否为空
int isEmptyQueue(Queue *q) {
return q->front == q->rear;
}
// 判断循环队列是否已满
int isFullQueue(Queue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
// 入队
int enQueue(Queue *q, int value) {
if (isFullQueue(q)) {
return 0;
} else {
q->data[q->rear] = value;
q->rear = (q->rear + 1) % MAX_SIZE;
return 1;
}
}
// 出队
int deQueue(Queue *q) {
if (isEmptyQueue(q)) {
return -1;
} else {
int value = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return value;
}
}
// 计算众数
int mode(Queue *q) {
int max = q->data[0];
int count = 1;
int i;
for (i = 1; i < MAX_SIZE; i++) {
if (q->data[i] == max) {
count++;
} else if (q->data[i] > max) {
max = q->data[i];
count = 1;
}
}
return max;
}
int main() {
Queue q;
initQueue(&q);
// 入队
enQueue(&q, 1);
enQueue(&q, 2);
enQueue(&q, 2);
enQueue(&q, 3);
enQueue(&q, 3);
enQueue(&q, 3);
enQueue(&q, 4);
enQueue(&q, 4);
enQueue(&q, 4);
enQueue(&q, 4);
enQueue(&q, 5);
enQueue(&q, 5);
enQueue(&q, 5);
enQueue(&q, 5);
enQueue(&q, 5);
enQueue(&q, 6);
enQueue(&q, 6);
enQueue(&q, 6);
enQueue(&q, 6);
enQueue(&q, 6);
// 计算众数
int m = mode(&q);
printf("众数为:%d\n", m);
return 0;
}
```
这个循环队列会先入队 20 个数据,然后计算这些数据的众数并输出。请注意使用时需要改变数据源和 MAX_SIZE 的值来适应实际需求。
阅读全文