|
发表于 2014-3-19 12:47:50
|
显示全部楼层
花了点时间写了个循环队列, LZ看来只能做伸手党了
#include "LIMITS.H"
#include "stdlib.h"
#include "stdio.h"
#ifndef ARRAY_COUNT
#define ARRAY_COUNT(a) (sizeof(a)/sizeof(a[0]))
#endif
static int index = 0; //循环列队写入位置
static int buffer_count = 0;//循环列队里有效数据个数
static long buffer_sum = 0; //循环列队累加和
static int buffer[21];
int buffer_min(void)
{
int min = INT_MAX;
int n = buffer_count;
while(n-- > 0)
{
if(min > buffer[n] )
{
min = buffer[n];
}
}
return min;
}
int buffer_max(void)
{
int max = INT_MIN;
int n = buffer_count;
while(n-- > 0)
{
if(max < buffer[n] )
{
max = buffer[n];
}
}
return max;
}
void buffer_add(int new_num)
{
if( buffer_count<ARRAY_COUNT(buffer) )
{
buffer_count++;
}
else
{
buffer_sum -= buffer[index];
}
buffer[index] = new_num;
buffer_sum += new_num;
if( ++index>=ARRAY_COUNT(buffer) )
{
index = 0;
}
}
void test(void)
{
volatile int i, min, max, count;
volatile long sum;
for(i=0; i<10; i++)
{
buffer_add(i);
}
min = buffer_min();
max = buffer_max();
sum = buffer_sum;
count = buffer_count;
//printf("min=%d, max=%d, sum=%d, count=%d\n", min, max, sum, count);
//
for(i=10; i<40; i++)
{
buffer_add(i);
}
min = buffer_min();
max = buffer_max();
sum = buffer_sum;
sum = buffer_sum;
count = buffer_count;
//printf("min=%d, max=%d, sum=%d, count=%d\n", min, max, sum, count);
}
|
|