SIEMENS山东省滨州市 西门子代理商——西门子华北一级总代理
| 更新时间 2024-11-26 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;} //释放链表 ---函数中需要改变指针的指向,也要传入二级指针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);}
计算一串数据的滑动平均值
比如传感器采集到连续的数据,需要作一个滑动的滤波处理,可以将数据不断的写入该循环链表,当链表满了之后,开始计算以链表长度为滑动窗口的平均值,并不断输出。
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()来释放内存。
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指向的节点的内存
然后循环指向,逐个释放,直至遇到刚才设置的断开的节点处,整个链表释放完成
相关产品