2014-07-04 1 views
0

현재 전화 번호에 따라 링크를 정렬하려고하고 정렬 알고리즘은 전화 번호를 정렬하지만 전화 번호는 전화 번호는 전체 노드 자체를 교환하지 않습니다. 이것은 내가이 난 단지 전화 번호 및 그 밖의 모든 것이를 swaping하고 내 스왑 기능으로 인해 일어나는 이유를 정확하게 알고 내 연결리스트 구조체링크 된 목록의 전체 노드를 교환하여 해당 노드 내의 모든 단일 정보를 서로 바꾸는 방법

struct List 
{ 
    char*firstName; 
    char*lastName; 
    char*phoneNumbers; 
    struct List*next; 
} 
typedef struct List list; 

입니다. 나는 몇 시간 동안 노력했지만, 나는 아무데도 가지 않는 것 같아. 나는 뭔가를 놓친다 ???

void insertSort(list*theList) 
{ 
    int swapped; 
    list *ptr1; 
    list *lptr = NULL; 

    ptr1 = malloc(sizeof(list)); 

    if (ptr1 == NULL) 
    { 
     return; 
    } 
    do 
    { 
     swapped = 0; 
     ptr1 = theList; 

     while (ptr1->next != lptr) 
     { 
      if (strcmp(ptr1->phoneNumbers,ptr1->next->phoneNumbers) > 0) 
      { 
       swap(ptr1, ptr1->next); 
       swapped = 1; 
      } 
      ptr1 = ptr1->next; 
     } 
     lptr = ptr1; 
    } 
    while (swapped); 
} 
void swap (list*elementOne, list*elementTwo) 
{ 
    char*temp; 

    temp = elementOne->phoneNumbers; 

    elementOne->phoneNumbers = elementTwo->phoneNumbers; 

    elementTwo->phoneNumbers= temp; 
} 

답변

0

당신은 같은 스왑 기능을 다시 작성할 수 있습니다 :

void swap (list *elementOne, list *elementTwo) { 
    list* temp = elementTwo; 
    elementTwo = elementOne; 
    elementOne = temp; 
} 

이 작동합니다, 가정 insertSort가 올 것입니다.

+0

나는 이전과 똑같은 것을 시도해 보았지만 불행히도 그것을 정렬하지는 않는다. 어쩌면 내 insertSort가 올바르지 않을 수도 있습니다. – user3806622