나는 처음으로 Duplicate check를 작성한 후 다음과 같은 Mammal을 가리킨다는 것을 알았습니다. 그래서 great_circle을 호출하면 두 개 사이의 거리를 계산할 때 0의 목록을 얻습니다. 동일한 포유 동물을 비교합니다.연결된 항목에서 비슷한 항목 제거
void remove_duplicates() {
int i,j;
double distance;
Mammal *next=head2.pointer;
for(i=0;i<list_length2-1;i++) {
Mammal *check=next->pointer;
Duplicate *d=malloc(sizeof(Duplicate));
d->mampointer=NULL;
d->number_of=0;
for(j=0;j<(list_length2-i)-1;j++) {
distance=great_circle(next->location, check->location);
if(distance<=0.02 && next->species==check->species) {
Mammal *a=next;
Mammal *b=check;
a->pointer=d->mampointer;
d->mampointer=a;
b->pointer=d->mampointer;
d->mampointer=b;
d->number_of++;
d->number_of++;
}
printf("%f\n",distance);
if (check->pointer!=NULL) {
check=check->pointer;
}
}
if(d->mampointer!=NULL) {
add_duplicate(create_duplicate(d));
}
if (next->pointer!=NULL) {
next=next->pointer;
}
}
}
다음에 발생하지 않아야 할 다음 메모리와 동일한 메모리를 가리키는 것으로 보입니다.
편집 : 내가 해결하기 위해 노력하고있어 문제는 다음과 같습니다
가 위도와 경도 좌표 여러 포유 동물이다
포유류의 일부
하지만 약간 다른과 여러 번보고되고있다 좌표,나는이 중복을 찾아 '잘못된'좌표의 평균을 가진 단일 포유 동물로 대체해야합니다.
Q : "중복을 삭제하는"알고리즘은 무엇입니까? 코드가 무엇을해야하는지 설명해 주시겠습니까? Q : "great_circle()"이란 무엇입니까? Q : 왜 "remove_duplicates()"안에 "add_duplicate()"합니까? Q : 해결하려는 문제는 정확히 무엇입니까? – FoggyDay
자세한 내용보기 – Jim006Jam
코드를 실제로 정리할 수 있다면 도움이 될 것입니다. 'check-> pointer'는 당신의 명명법이'check-> next'가 아니고'Mammal * next' 대신'Mammal * mPointer'이어야합니다. 또한 if (거리 = 0.02) && (다음 -> 종 = 체크 -> 종)이어야합니다. 종))'그것의 문장을 단락시키는 방법. – KillaBytes