c语⾔峰值算法_快速查⼆维数组的所有峰值,c语⾔实现最好,python也可以,最好能实现。。。
展开全部
#include
#include
#include
#include
#define maxsize 6 //每个波形数据最⼤采集个数62616964757a686964616fe78988e69d8331333365636665  默认6 typedef struct array1
{
int *data;
struct array1 *next;
}ARR1;
ARR1 *addNewArr(ARR1 *arrHead,ARR1 *arrTail);//插⼊⼀组波形数据节点 返回尾节点
int findMaxF(ARR1 *arrHead);//查最⼤峰值
c语言二维数组表示方法
int removeMinF(ARR1 *arrHead);//移除最⼩峰值数据组  返回最⼩峰值
void printfArr(ARR1 *arrHead);//打印数据链表
int main()
{
ARR1 *arrHead=(ARR1 *)malloc(sizeof(ARR1));
arrHead->next=NULL;
ARR1 *arrTail=NULL;
arrTail=addNewArr(arrHead,arrTail);//想插⼊⼏组,就调⽤⼏次  我就测试6组
arrTail=addNewArr(arrHead,arrTail);
arrTail=addNewArr(arrHead,arrTail);
arrTail=addNewArr(arrHead,arrTail);
arrTail=addNewArr(arrHead,arrTail);
arrTail=addNewArr(arrHead,arrTail);
printf("采集的原数据组为:\n");
printfArr(arrHead);
printf("最⼤峰值:%d,最⼩峰值值:%d\n",findMaxF(arrHead),removeMinF(arrHead));
printf("删除最⼩峰值数据组后的数据为:\n");
printfArr(arrHead);
return 0;
}
void printfArr(ARR1 *arrHead)//打印数据链表
{
while(arrHead->next!=NULL)
{
printf("%d,%d,%d,%d,%d,%d\n",arrHead->next->data[0],arrHead->next->data[1],arrHead->next->data[2],arrHead->next->data[3],arrHead->next->data[4],arrHead->next->data[5]);
arrHead=arrHead->next;
}
}
ARR1 *addNewArr(ARR1 *arrHead,ARR1 *arrTail)//插⼊⼀组波形数据  返回尾节点
{
int *data=(int *)malloc(sizeof(int)*maxsize),i;
printf("采集⼀组波形数据(最⼤采集个数%d):",maxsize);
for(i=0;i
scanf("%d",&data[i]);
ARR1 *arrNew=(ARR1 *)malloc(sizeof(ARR1));
arrNew->data=data;
arrNew->next=NULL;
if(arrHead->next==NULL)//插⼊第⼀组数组 作为⾸节点
arrHead->next=arrNew;
else
arrTail->next=arrNew;
arrTail=arrNew;
return arrTail;
}
int findMaxF(ARR1 *arrHead)//查最⼤峰值
{
int i,maxNum=0,maxf=0;
while(arrHead->next!=NULL)
{
maxNum=0;
for(i=0;i
if(arrHead->next->data[i]>maxNum)
maxNum=arrHead->next->data[i];
}
if(maxNum>maxf)//获取最⼤峰值
maxf=maxNum;
arrHead=arrHead->next;
}
return maxf;
}
int removeMinF(ARR1 *arrHead)//移除最⼩峰值数据组  返回最⼩峰值{
int i,maxNum=0,minf=INT_MAX;
ARR1 *minDataSave=NULL,*arrHeadSave=arrHead;
while(arrHead->next!=NULL)
{
maxNum=0;
for(i=0;i
{
if(arrHead->next->data[i]>maxNum)
maxNum=arrHead->next->data[i];
}
if(maxNum
{
minDataSave=arrHead->next;
minf=maxNum;
}
arrHead=arrHead->next;
}
arrHead=arrHeadSave;
//移除最⼩峰值数据组
while(arrHead->next!=NULL)
{
if(arrHead->next==minDataSave)//删除节点重组链表
arrHead->next=minDataSave->next; minDataSave->next=NULL;
free(minDataSave->data);//释放节点内存free(minDataSave);
break;
}
arrHead=arrHead->next;
}
return minf;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。