2010-02-03 4 views
0

이 C++ 코드에서 연결된 목록이 어떻게 작동하는지 이해해야합니다. 내 교과서에서 가져 왔어. 정확히 여기서 무슨 일이 일어나는지 자세히 설명해 줄 수 있습니까?연결된 목록 설명 필요

/*The Node Class*/ 
class Node{ 
    private: 
     int object; 
     Node *nextNode; 

    public:    
     int get() 
     { 
      return object;  
     } 
     void set(int object) 
     { 
      this-> object=object;  
     } 
     Node *getNext() 
     { 
      return nextNode;  
     }; 
     void setNext(Node *nextNode) 
     { 
      this->nextNode = nextNode; 
     }; 
}; 



/* The List class */ 
class List 
{ 
    public: 
     List(); 
     void add (int addObject); 
     int get(); 
     bool next(); 
     friend void traverse(List list); 
     friend List addNodes(); 
    private: 
     int size; 
     Node * headNode; 
     Node * currentNode; 
     Node * lastCurrentNode; 
}; 
/* Constructor */ 
List::List() 
{ 
    headNode = new Node(); 
    headNode->setNext(NULL); 
    currentNode = NULL; 
    lastCurrentNode = NULL; 
    size = 0; 
} 
/* add() class method */ 
void List::add (int addObject) 
{ 
    Node * newNode = new Node(); 
    newNode->set(addObject); 
    if(currentNode != NULL) 
    { 
     newNode->setNext(currentNode->getNext()); 
     currentNode->setNext(newNode); 
     lastCurrentNode = currentNode; 
     currentNode = newNode; 
    } 
    else 
    { 
     newNode->setNext(NULL); 
     headNode->setNext(newNode); 
     lastCurrentNode = headNode; 
     currentNode = newNode; 
    } 
    size ++; 
} 
/* get() class method */ 
int List::get() 
{ 
    if (currentNode != NULL) 
     return currentNode->get(); 
} 
/* next() class method */ 
bool List::next() 
{ 
    if (currentNode == NULL) return false; 
    lastCurrentNode = currentNode; 
    currentNode = currentNode->getNext(); 
    if (currentNode == NULL || size == 0) 
     return false; 
    else 
     return true; 
} 
/* Friend function to traverse linked list */ 
void traverse(List list) 
{ 
    Node* savedCurrentNode = list.currentNode; 
    list.currentNode = list.headNode; 
    for(int i = 1; list.next(); i++) 
    { 
     cout<<"\n Element "<<i<<" "<<list.get(); 
    } 
    list.currentNode = savedCurrentNode; 
} 
/* Friend function to add Nodes into the list */ 
List addNodes() 
{ 
    List list; 
    list.add(2); 
    list.add(8); 
    list.add(7); 
    list.add(1); 
    cout<<"\n List size = "<<list.size<<"\n"; 
    return list; 
} 


main() 
{ 
    List list = addNodes(); 
    traverse(list); 

    system("pause"); 
} 
+3

Q의 트랙 레코드에 도움을 얻는 데 문제가 있습니다 링크드리스트의 작동 원리를 설명하는 온라인 리소스가 많이 있습니다. – wheaties

+6

텍스트 북에서이 코드를 얻었지만 텍스트 북은 어떻게 작동하는지 설명하지 않습니다. 위키 백과의 링크 된 목록은 다음과 같습니다. http://en.wikipedia.org/wiki/Linked_list –

+3

위의 구현에서 이해할 수없는 특정 부분을 선택할 수있는 경우 도움이 될 수 있습니다. 그것이 가능할 것이라고 생각합니다. –

답변

0

게시 한 것은 링크 된 목록의 매우 기본적인 구현입니다. 당신이 연결하고있는 객체는 "노드"입니다.

GetNext 함수는 목록의 다음 노드 ( )를 가져오고 setNex 함수는 목록의 다음 노드를 가져옵니다.

적어도이 장에는 코드에 대한 설명이 있어야하며 링크 된 목록의 개념에 대한 설명이 있어야합니다.

희망이 도움이됩니다. 이 코드의 노드 클래스 부분

+0

감사합니다. List 클래스에서 나는 currentNode와 lastCurrentNode를 이해합니다. 그러나 headNode는 무엇입니까? 그것은 무엇을 위해 사용됩니까? –

+0

헤드 노드를 사용하면 목록의 앞부분을 즉시 참조 할 수 있습니다. 링크 된 목록이므로 (랜덤 액세스 배열이 아님) 헤드 노드에서 원하는 노드를 찾기 위해 탐색 (또는 검색)을 시작해야합니다. – aggietech

+0

알았습니다! 이제 나에게 크리스탈입니다. –

1

설명 :

노드는 두 가지 정보 번호 및 다른 링크 (다음) 노드와 목적이다.

문자 그대로 정보를 보유한 객체의 링크 된 목록을 만들 수 있습니다. 이 경우 각 노드는 숫자 만 저장할 수 있습니다 (정수는 십진수가 아닌 전체 값만 저장할 수있는 숫자 유형입니다)

+0

감사합니다. List 클래스에서 나는 currentNode와 lastCurrentNode를 이해합니다. 그러나 headNode는 무엇입니까? 그것은 무엇을 위해 사용됩니까? –

+1

headnode는 목록의 첫 번째 노드에 대한 참조입니다. 그것은 headnode를 잃지 않고 currentnode를 설정할 수 있도록 currentnode와 별개입니다. 헤드 노드가 없으면 순회를 시작하기 위해 목록의 첫 번째 항목에 대한 참조를 얻을 수 없습니다. – PeanutPower

+0

정말 고마워요. –