2011-03-26 3 views
0

이것은 무엇을 의미합니까?연결된 목록 질문

void add(struct node **root, int x) 
{ 
     struct node *conductor; 
     if(*root==NULL) 
     { 
      (*root)=malloc(sizeof(struct node)); 
      (*root)->x=x; 
      (*root)->next=NULL ;   
     } 
     else 
     { 
      conductor = *root; 
      while(conductor->next!=NULL) 
      { 
       conductor = conductor -> next;    
      }     
      conductor->next=malloc(sizeof(struct node)); 
      conductor->next->x=x; 
      conductor->next->next=NULL; 
    } 
    } 

conductor=Conductor->next; 그 의미는 무엇입니까? 나는 나의 호기심을 공급하기 위해 필요 나는에 대한 내 생각은, 난 그냥 내 생각이 정확하면, 나는 내 코드에 의심을 가진 모든 시간을 오전 확인하기 위해 내 원하는됩니다

에 해당하는 경우 알고 싶어

+2

이 코드를 이해하지 못한다면 이전 질문이 "[귀하의] 연결된 목록 코드"(이전 질문의 텍스트에서 인용 ...) 였을 것입니다. 어떻게 당신 것이 될 수 있습니까? 숙제하고, 복사/붙여 넣기를 중지하고, 프로그래밍을 이해하기 위해 조금 생각해보십시오! –

+1

코드가 이와 유사하게 보입니다. http://www.cprogramming.com/tutorial/c/lesson15.html – mdegges

+0

또한 이해할 수 없다면 그냥 물어보십시오. 자신을 위로하거나 위처럼 올리려고 할 때 자신을 내립니다. –

답변

1

연결된 목록은 개체의 세리에이션으로 구성되며 각 목록은 목록의 다음 요소를 가리 킵니다. conductor = conductor->next; 라인은 conductor 변수 (목록 요소 인 struct node을 가리킴)가 목록의 다음 요소를 가리 키도록 업데이트합니다.

업데이트 : 해당 데이터 구조에 대한 시각적 표현이 좋은 linked-list에 대한 위키 백과 문서를 제공합니다.

+0

그래픽 또는 그림 표현을 제공 할 수 있습니까? 내 아이디어가 여전히 흐려짐 –

0

conductor -> next은 단지 (*conductor).next으로 작성하는 것입니다.

도체가 struct에 대한 포인터이기 때문에 conductor.next를 통해 해당 멤버에 직접 액세스 할 수 없습니다.이 경우 conductor은 이제 목록의 다음 요소 (conductor->next이 가리키는 요소)를 가리 킵니다. 전)

+0

권리가 있습니까? 지휘자 = 지휘자 -> 다음, 머리가 될 것인가? –

+0

그것은 목록의 머리가되지 않습니다.헤드는 여전히 루트이지만 while 루프는 'conductor'가 마지막 노드 (물론 NULL은 포함하지 않음)를 가리 키도록 만듭니다. – MByD

+0

즉, while 루프는 실제로 말합니다. 도체가 마지막 노드 (conductor-> next! = NULL, 다른 노드가 있음을 의미)를 가리 키지 않는 동안 도체 점을 다음 노드로 지정합니다. – MByD

0

conductor=*root 목록 루트

conductor=conductor->next에서 첫 번째 요소를 가리키는 포인터 도체를 설정 목록의 루트에 다음 요소를 가리 키도록 포인터 도체를 설정합니다.

길이가 1 인 배열과 비교할 때 첫 번째 줄은 배열의 0 번째 요소에 대한 포인터를 설정하고 다음 줄은 포인터를 첫 번째 요소로 설정합니다. 이것이 이해가되지 않는다면, 링크 된리스트를 읽고 왜 배열을 사용하는지 비교해야한다. 당신이 무엇을 요구에 따라

0

: 다음 메모리 위치에

conductor=conductor->next means that the means that the conductor will move 

. 예를 들어

: 그것이 가리키는 const 포인터가 아닌 경우 우리가 어느 곳으로 포인터를 가리킬 수

void insert(struct node **ptr) 
{ 
    struct node *tmp; 
    tmp=*ptr; 
    tmp=tmp->next; 
} 

TMP 이제 연결리스트의 시작 메모리 위치를 가리키고 있습니다.

tmp = tmp-> 다음은 sizeof 포인터가 4 바이트 인 경우 컴파일러에 따라 다음 메모리 위치를 가리키는 것을 의미하며 4 바이트로 이동합니다.