加入收藏 在线留言 联系我们
关注微信
手机扫一扫 立刻联系商家
全国服务热线15915421161

SIEMENS山东省滨州市 西门子代理商——西门子华北一级总代理

更新时间
2024-07-04 07:00:00
价格
请来电询价
西门子总代理
PLC
西门子一级代
驱动
西门子代理商
伺服电机
联系电话
15903418770
联系手机
15915421161
联系人
张经理
立即询价

详细介绍
环形链表的一种应用

        计算一串数据的滑动平均值

        比如传感器采集到连续的数据,需要作一个滑动的滤波处理,可以将数据不断的写入该循环链表,当链表满了之后,开始计算以链表长度为滑动窗口的平均值,并不断输出。



















  • //计算平均值 void calc_list_ave(stData *pHead, float *res){    stData *pTmp=NULL;//临时指针    pTmp=pHead;//临时指针指向链表头
       int cnt = 0;    float sum = 0;
       do{        sum += pTmp->data;        cnt++;        pTmp=pTmp->pNext;    }while(cnt<LIST_LEN);
       //平均值结果通过指针传出    *res = sum/LIST_LEN;}


            计算链表中所有数据的平均值,首先要获取各个节点的数据,基本思路是:

            使用一个临时指针指向头节点pHead(当然选用pList或pTail也可以),然后获取该节点的数据,并移动到下一个节点,循环获取数据即可,停止条件为移动了链表的长度次。

    5环形链表的销毁

            环形链表在初始化时是使用malloc()为各个节点动态分配内存的,因此在使用完链表后,需要使用free()来释放内存。
















  • //释放链表 ---函数中需要改变指针的指向,也要传入二级指针void release_list(stData **pList) {    stData *pTmp=NULL;//临时指针    stData *pDel=NULL;
       pTmp=(*pList)->pNext;    (*pList)->pNext=0;//断开第一个节点
       do{        pDel=pTmp;        pTmp=pTmp->pNext;        free(pDel);    }while(pTmp->pNext != 0);}

            基本思路是:首先断开环形链表的第1个和第2个节点的指向关系,然后逐个释放各个节点即可。

  • 使用一个临时指针pTmp指向尾节点pTail

  • 将pList的pNext置为0,断开环形链表的第1个和第2个节点的指向关系,作为循环销毁结束的判断条件:

  • 再使用一个临时指针pDel指向刚才的临时指针pTmp指向的节点

  • 将pTmp向后移动一个节点

  • 释放pDel指向的节点的内存

  • 然后循环指向,逐个释放,直至遇到刚才设置的断开的节点处,整个链表释放完成


  • 相关产品

    联系方式

    • 电  话:15903418770
    • 联系人:张经理
    • 手  机:15915421161
    • 微  信:15915421161