本帖最后由 hou 于 2010-8-11 10:55 编辑
用循环队列表示:分配10个单位的连续存储空间(地址编号0~9)。用两个指针:p_head记录当前队首位置(为最新采样数据),p_min记录最小值所在位置。
在进行第一次采样后,用该采样值d_sample填充全部空间。此时p_head=p_min=0。然后执行以下循环:
{
wait_sample_time(); //等待下一次采样时刻的到来。
p_head=(p_head+1)/10;
*p_head=sample();
if(p_head==p_min)
p_min=min_ptr(); // 此时原来最小值成为最古老数据,被挤出队列,
//新的最小值在当前的10个数据中重新生成。
else
{ // 此时原来最小值仍为队列有效成员,
//新最小值在原最小值和新采样值之间选择。
if(*p_head<*p_min)
p_min=p_head;
}
} //循环结束 |