用C语言编写一个FIFO队列函数,去除最大最小值,求平均值
时间: 2024-03-01 16:54:26 浏览: 213
好的,以下是一个用 C 语言编写的简单的 FIFO 队列函数,可以去除最大值和最小值,并求出剩余元素的平均值:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int items[MAX_SIZE];
int front;
int rear;
} Queue;
void init(Queue *q) {
q->front = -1;
q->rear = -1;
}
int is_empty(Queue *q) {
return q->front == -1;
}
int is_full(Queue *q) {
return q->rear == MAX_SIZE - 1;
}
void enqueue(Queue *q, int item) {
if (is_full(q)) {
printf("Queue is full\n");
return;
}
if (is_empty(q)) {
q->front = 0;
q->rear = 0;
} else {
q->rear++;
}
q->items[q->rear] = item;
}
int dequeue(Queue *q) {
if (is_empty(q)) {
printf("Queue is empty\n");
return -1;
}
int item = q->items[q->front];
if (q->front == q->rear) {
q->front = -1;
q->rear = -1;
} else {
q->front++;
}
return item;
}
void remove_max_min(Queue *q) {
int min = q->items[q->front];
int max = q->items[q->front];
for (int i = q->front + 1; i <= q->rear; i++) {
if (q->items[i] < min) {
min = q->items[i];
}
if (q->items[i] > max) {
max = q->items[i];
}
}
for (int i = q->front; i <= q->rear; i++) {
if (q->items[i] == min) {
for (int j = i; j < q->rear; j++) {
q->items[j] = q->items[j + 1];
}
q->rear--;
break;
}
}
for (int i = q->front; i <= q->rear; i++) {
if (q->items[i] == max) {
for (int j = i; j < q->rear; j++) {
q->items[j] = q->items[j + 1];
}
q->rear--;
break;
}
}
}
float average(Queue *q) {
if (is_empty(q)) {
printf("Queue is empty\n");
return -1;
}
int sum = 0;
int count = 0;
for (int i = q->front; i <= q->rear; i++) {
sum += q->items[i];
count++;
}
return (float) sum / count;
}
int main() {
Queue q;
init(&q);
// 测试队列功能
enqueue(&q, 5);
enqueue(&q, 10);
enqueue(&q, 3);
enqueue(&q, 7);
enqueue(&q, 1);
remove_max_min(&q); // 去除最大值和最小值
printf("Average: %f\n", average(&q)); // 计算平均值
return 0;
}
```
这个 FIFO 队列函数包括以下几个函数:
- `init(Queue *q)`:初始化一个空队列。
- `is_empty(Queue *q)`:检查队列是否为空,如果为空则返回 1,否则返回 0。
- `is_full(Queue *q)`:检查队列是否已满,如果已满则返回 1,否则返回 0。
- `enqueue(Queue *q, int item)`:在队列的末尾添加一个元素。
- `dequeue(Queue *q)`:从队列的开头删除一个元素,并返回该元素。
- `remove_max_min(Queue *q)`:从队列中去除最大值和最小值。
- `average(Queue *q)`:计算剩余元素的平均值。
你可以使用这些函数来操作队列。例如:
```c
Queue q;
init(&q);
enqueue(&q, 5);
enqueue(&q, 10);
enqueue(&q, 3);
enqueue(&q, 7);
enqueue(&q, 1);
remove_max_min(&q);
printf("Average: %f\n", average(&q));
```
阅读全文