노드는 매우 일반적인 용어입니다. 본질적으로 노드는 그래프의 정점 또는 네트워크의 한 지점입니다.
데이터 구조와 관련하여 노드는 대개 더 큰 데이터 구조를 형성하는 (일반적으로) 다른 장치에 연결된 데이터의 단일 기본 단위를 의미합니다. 이것을 설명하는 간단한 데이터 구조가 링크 된 목록입니다. 링크 된 목록은 각 노드가 포인터를 통해 다음 노드에 링크되는 노드 체인일뿐입니다. 끝 노드에는 널 포인터가 있습니다.
노드는 임의의 단일 노드가 다른 노드 수에 연결될 수있는 그래프 또는 각 노드에 두 개 이상의 자식 노드가있는 트리와 같이 더 복잡한 구조를 형성 할 수 있습니다. 하나 이상의 연결된 노드로 구성된 모든 데이터 구조는 그래프입니다. (연결된 목록과 트리가 모두 그래프이기도 함)
"노드"의 개념을 클래스와 같은 객체 지향 개념에 매핑하는 측면에서 C++에서는 일반적으로 데이터 구조 클래스 컨테이너로서), 내부적으로 개별 노드에서 모든 작업을 수행합니다. 예를 들어 LinkedList
이라는 클래스가있을 수 있습니다. LinkedList
클래스는 LinkedList::Node
과 같이 개별 노드를 나타내는 내부적으로 정의 된 (중첩 된) 클래스를 갖습니다.
좀 더 까다로운 구현에서는 데이터 구조에 액세스하는 유일한 방법으로 노드 자체를 볼 수도 있습니다. 그런 다음 노드에서 작동하는 일련의 함수가 있습니다. 그러나 이것은 C 프로그램에서 더 일반적으로 볼 수 있습니다. 예를 들어 struct LinkedListNode
일 수 있으며, 다음과 같은 함수에 전달됩니다. void LinkedListInsert(struct LinkedListNode* n, Object somethingToInsert);
제 생각에는 사용자의 구현 세부 정보가 더 잘 숨겨져 있기 때문에 객체 지향 접근법이 우수합니다.
멋진 답변입니다. 그러나 링크 된 목록에 대한 컨테이너 접근법은 링크 된 목록의 여러 장점 *을 잃어 버리기 때문에 종종 "열등한"것이라고 생각합니다 (일부 성능 특성을 유지함). 불변 체인을 통해 독립적으로 트래버스 (및 파기) 할 수있는 능력은 매우 가치 있고 활용도가 낮습니다 (IMOHO). 많은 수의 [functional] 언어 (Haskell, Lisp/Scheme/Clojure, Scala 등)는 컨테이너가 아닌 연결된 목록 접근법에 크게 의존하고 있으며, 실제로 많은 힘을 끌어냅니다. –