<aside> 💡

Node 구조에 대하여

</aside>

Node는 연결 리스트, 트리, 그래프와 같은 다양한 데이터 구조의 기본 구성 요소로, 노드는 일반적으로 데이터와 다른

노드에 대한 참조를 포함한다.

1. 연결 리스트 노드

단일 연결 리스트 (Singly Linked List) 에서는 각 노드가 데이터와 다음 노드에 대한 참조를 가진다.

public class Node
{
		public int Data {get; set;} //데이터 저장
		public Node Next { get; set; } // 다음 노드에 대한 참조
		
		public Node(int data)
		{
			Data = data;
			Next = null;
		}		
}

위 구조를 보면 노드는 크게 데이터와 다음 노드를 가리키는 Next 속성을 지니고 있다.

2. 이중 연결 리스트의 노드

이중 연결 리스트(Doubly Linked List) 에서는 각 노드가 이전 및 다음 노드에 대한 참조를 모두 가진다.

public class DoublyNode
{
	public int Data { get; set;}
	public DoublyNode Previous { get; set;} // 이전 노드에 대한 참조
	public DoublyNode Next { get; set;} // 다음 노드에 대한 참조
	
	public DoublyNode (int data)
	{
		Data = data;
		Previous = null;
		Next = null;
	}
}

3. 트리의 노드

이진 트리(Binary Tree) 에서 노드는 데이터와 왼쪽 및 오른쪽 자식에 대한 참조를 가진다.

public class TreeNode
{
	public int Data { get; set; }
	public TreeNode Left { get; set; } //왼쪽 자식 노드
	public TreeNode Right { get; set; } //오른쪽 자식 노드
	
	public TreeNode(int data)
	{
		Data = data;
		Left = null;
		Right = null;
	}
}

4. 제네릭 노드

노드가 다양한 데이터 타입을 처리하도록 제네릭(Generic) 을 사용 할 수 있음.

public class Node<T>
{
	public T Data{ get; set;}
	public Node<T> Next {get; set;}
	
	public Node(T data)
	{
		Data = data;
		Next = null;
	}
}

5. 구조체를 사용한 노드

노드를 구조체(Struct) 로 정의하는 방식도 가능함. 하지만 구조체는 값 타입이므로 참조 타입인 클래스보다

메모리 복사 비용이 높음.

public struct Node
{
	public int Data{ get; set; }
	public Node? Next{ get; set; }
	
	public Node(int data)
	{
		Data = data;
		Next = null;
	}
}