2014-03-04 5 views
2

배열과 같은 다른 개체를 가리 키기 위해 포인터를 사용하는 방법을 알고 있지만 연결된 목록에서 포인터를 사용하는 방법을 아는 계획에서는 혼란 스럽습니다. 예를 들어 : 그리고링크 된 목록의 포인터 사용

struct node { 
    int info; 
    struct node *next; 
} 
typedef struct node Node 

프로그램에 해당 나중에 가정 데이터 목록이 순서대로 데이터를 보유리스트의 첫 번째 노드의 어드레스로 설정된다 : 25,30,45,60,65, 80, 90

나는 데이터 목록 처음 목록의 머리입니다 (45)를 유지하는 노드의 주소로 PTR1를 설정하고 감안할 때 80

을 들고 노드의 주소로 PTR2를 설정 C 문을 작성하기 위해입니다 , 내 생각은 :

ptr1= dataList.next.next 

그러나 나는 확실히 그 잘못된 형식이거나 나는 또한

ptr1->next->next 

이 , 올바른 될 수 있다고 생각하지만 다시, 나는 확실하지 않다입니다.

+0

PTR1 = (dataList.next)은 다음의 선언을 가정 -> 다음 PTR1 – michaeltang

+1

'= dataList->하는 next-> next'를 데이터 목록 헤드 포인터이다 가정 요소. – tesseract

답변

2

ptr1->next(*ptr1).next과 동일합니다. 즉 ptr1이 가리키는 구조체에서 next이라는 멤버를 가져옵니다. 만약 dataList, ptr1ptr2 노드를 구조체에 대한 포인터, 말했듯

구조 역 참조 a->b

1

("개체의 부재 B는 가리키는"). 따라서 ptr1 = dataList->next->next이어야합니다. ->은 포인터가 가리키는 구조체의 멤버를 가리키는 바로 가기입니다.

1

dataList는 목록의 시작 주소를 보유하고 있습니다. 따라서 dataList 변수를 사용하여 모두 액세스 할 수 있습니다. ->next->next을 사용하여 45를 가리키는 아이디어가 정확하다는 것은 정확히 ptr1 = dataList->next->next이어야하지만, 우리는 모든 요소를 ​​얻으려고 ->next->next->next...을 수행하고 있지만 포인터를 사용하여 다음 주소를 유지하고 원하는 값을 얻을 때까지 반복하십시오.

0

Doing next->next->next은 작동하지만 링크드 목록을 사용하여 달성하고자하는 것은 아닙니다. 탐색하는 동안 각 노드의 info을 비교하고 가리 키려는 노드에 ptr1prt2을 지정합니다. 샘플 코드는 다음과 같습니다.

추신 : 나는 초보자이며, 틀렸다면 나를 바로 잡습니다.

if (dataList != 0) { 
     while (dataList->next != 0) 
     { 
      dataList = dataList->next; 
      if (dataList->info == 25) { 
       ptr1 = dataList; 
      } 
      if (dataList->info == 80) { 
       ptr2 = dataList; 
      } 

     } 
} 
0

은 데이터 목록

struct node anode1, anode2, anode3, anode4, anode5, anode6, anode7; 
    struct node *dataList = &anode1; 

    anode1.info = 25; 
    anode1.next = &anode2; 

    anode2.info = 30; 
    anode2.next = &anode3; 

    anode3.info = 45; 
    anode3.next = &anode4; 

    anode4.info = 60; 
    anode4.next = &anode5; 

    anode5.info = 65; 
    anode5.next = &anode6; 

    anode6.info = 80; 
    anode6.next = &anode7; 

    anode7.info = 90; 
    anode7.next = NULL; 

    printf("Third node = %d\n", dataList->next->next->info); // prints 45 
    printf("Sixth node = %d\n", dataList->next->next->next->next->next->info); // prints 80