/*
* loop_queue.c
*
* Created on: Mar 2, 2022
* Author: xhome.
*/#include<stdio.h>#include"loop_queue.h"/**
* capacity: The number of stored elements in the queue.
*/voidinit_loop_queue(loop_queue_t *queue,int capacity){if((capacity >(DATA_LEN-1))||(capacity <0)){
queue->capacity = DATA_LEN-1;}else{
queue->capacity = capacity+1;}
queue->front =0;
queue->rear =0;return;}intfull_loop_queue(loop_queue_t *queue){if(queue->front ==(queue->rear+1)%(queue->capacity)){return1;}else{return0;}}intempty_loop_queue(loop_queue_t *queue){if(queue->front == queue->rear){return1;}else{return0;}}intenter_loop_queue(loop_queue_t *queue,float dat){if(full_loop_queue(queue)==1){return1;}else{
queue->data[queue->rear]= dat;
queue->rear =(queue->rear+1)%(queue->capacity);}return0;}intout_loop_queue(loop_queue_t *queue,float*dat){if(empty_loop_queue(queue)){return1;}else{*dat = queue->data[queue->front];
queue->front =(queue->front+1)%(queue->capacity);}return0;}intget_loop_queue_average(loop_queue_t * queue,float* avg){int index = queue->front;float sum =0;for(int i =0; i <(queue->capacity-1); i++){
sum += queue->data[index];if(index == queue->rear){break;}
index =(index+1)%queue->capacity;}*avg = sum/(queue->capacity-1);return0;}/**
* Gets the rate of change of elements in the queue.
*/intget_queue_rate(loop_queue_t * queue,float coef,float* rate){float first = queue->data[queue->front];float last = queue->data[queue->rear];*rate = coef*(last - first);return0;}intshow_loop_queue(loop_queue_t * queue){int index = queue->front;for(int i =0; i < queue->capacity-1; i++){printf("%0.2f ", queue->data[index]);if(index == queue->rear){break;}
index =(index+1)%queue->capacity;}putchar(10);return0;}intloop_queue_size(loop_queue_t * queue){return(queue->rear - queue->front + queue->capacity)%(queue->capacity);}
1.3 main函数调用测试
#include<stdio.h>#include"loop_queue.h"intmain(){
loop_queue_t queue;float avg;float data;init_loop_queue(&queue,10);for(int i =0; i <20; i++){enter_loop_queue(&queue, i);}show_loop_queue(&queue);get_loop_queue_average(&queue,&avg);printf("avg:%0.3f \n", avg);for(int i =10; i <20; i++){out_loop_queue(&queue,&data);enter_loop_queue(&queue, i);show_loop_queue(&queue);get_loop_queue_average(&queue,&avg);printf("avg:%0.3f \n", avg);}return0;}