ノードは非常に一般的な用語です。基本的に、ノードはグラフの頂点、またはネットワーク内のポイントです。
データ構造に関しては、ノードは通常、(通常)他のユニットに接続され、より大きなデータ構造を形成する単一の基本単位のデータを意味します。これを実証する単純なデータ構造はリンクされたリストです。リンクされたリストは単なるノードのチェーンであり、各ノードはポインタを介して次のノードにリンクされています。エンドノードにはヌルポインタがあります。
ノードは、任意の単一のノードが任意の数の他のノードに接続されているグラフや、各ノードが2つ以上の子ノードを持つツリーなど、より複雑な構造を形成できます。 1つ以上の接続されたノードからなる任意のデータ構造がグラフであることに留意されたい。
"ノード"の概念をクラスのようなオブジェクト指向の概念にマッピングするという点では、C++では通常はデータ構造クラス(時には既知のコンテナとして)、個々のノードですべての作業を内部的に行います。たとえば、LinkedList
というクラスがあるとします。したがって、LinkedList
クラスは、LinkedList::Node
のように、個々のノードを表す内部定義(ネスト)クラスを持ちます。
さらに複雑な実装では、データ構造にアクセスする唯一の方法としてノード自体が表示されることがあります。次に、ノードで動作する一連の関数があります。しかし、これはCプログラムでよく見られます。たとえば、struct LinkedListNode
があるとしたら、void LinkedListInsert(struct LinkedListNode* n, Object somethingToInsert);
のような関数に渡されます。オブジェクト指向のアプローチは、ユーザーからの実装の詳細がよく隠れているので、優れています。
ニースの答え。しかし、リンクリストのコンテナアプローチは、リンクリストの利点*の多くを失うため、しばしば「劣る」と考えています(パフォーマンス特性の一部を保持します)。不変のチェーンを独立してトラバース(および破棄)する能力は、非常に価値があり、活用されていません(IMOHO)。多くの[機能]言語(Haskell、Lisp/Scheme/Clojure、Scalaなど)は、この非コンテナリンクリスト手法に大きく依存しており、実際にはそれから多くの力を引き出しています。 –