Programing/C#
C# 프로그래밍의 기초: LinkedList
유니얼
2024. 8. 24. 16:08
728x90
LinkedList<T>는 C#에서 제공하는 이중 연결 리스트 구현체로, 각 요소가 노드(Node) 형태로 구성되어 있으며, 각 노드는 데이터와 함께 다음 및 이전 노드에 대한 참조를 포함합니다. 이 자료구조는 데이터의 동적인 추가 및 삭제에 최적화되어 있으며, 배열이나 일반 리스트에 비해 중간 삽입 및 삭제 작업에서 뛰어난 효율을 제공합니다. 이 블로그 포스트에서는 LinkedList<T>의 특징, 주요 메서드, 사용 시 고려해야 할 사항을 살펴보겠습니다.
LinkedList의 주요 특징
- 이중 연결 리스트: C#의 LinkedList<T>는 각 노드가 이전 및 다음 노드의 참조를 유지하는 이중 연결 리스트로 구현됩니다. 이 구조는 리스트의 양쪽 끝에서의 추가 및 제거를 용이하게 합니다.
- 동적 크기 조정: LinkedList는 요소의 추가 및 제거에 따라 크기가 자동으로 조정됩니다. 이는 고정 크기의 배열과는 대조적으로, 런타임 중에 컬렉션의 크기를 자유롭게 변경할 수 있음을 의미합니다.
- 순차 접근: 인덱스를 통한 임의 접근이 제공되지 않으며, 요소에 접근하기 위해서는 순차적으로 탐색해야 합니다. 이는 요소가 많은 경우 성능 저하를 초래할 수 있습니다.
- 삽입/삭제 효율성: LinkedList는 중간에 요소를 삽입하거나 제거할 때 배열이나 List<T>에 비해 뛰어난 성능을 제공합니다. 노드 사이에 새 노드를 추가하거나 기존 노드를 제거하는 작업은 O(1) 시간 복잡도로 처리됩니다.
주요 메서드 및 사용 방법
- AddFirst(T item): 리스트의 시작 부분에 새 요소를 추가합니다.
- AddLast(T item): 리스트의 끝 부분에 새 요소를 추가합니다.
- AddBefore(LinkedListNode<T> node, T item), AddAfter(LinkedListNode<T> node, T item): 지정된 노드의 앞이나 뒤에 새 요소를 삽입합니다.
- Remove(T item): 특정 요소를 제거합니다.
- RemoveFirst(), RemoveLast(): 리스트의 첫 번째 또는 마지막 요소를 제거합니다.
- Count: 리스트에 저장된 요소의 수를 반환합니다.
전체예제 코드
using System;
using System.Collections.Generic;
namespace CSharp_ProgramingStudy.Chapter6_DataStructure
{
public class Class8
{
public void Run()
{
// 정수를 저장하는 LinkedList 생성
LinkedList<int> numbers = new LinkedList<int>();
// 리스트에 요소 추가
numbers.AddLast(1); // 마지막에 1 추가
numbers.AddLast(2); // 마지막에 2 추가
numbers.AddFirst(0); // 처음에 0 추가
// LinkedList의 첫 번째 노드에 접근
LinkedListNode<int> firstNode = numbers.First;
Console.WriteLine($"First element: {firstNode.Value}"); // 출력: First element: 0
// 특정 노드 뒤에 요소 추가
numbers.AddAfter(firstNode, 5); // 첫 번째 노드(0) 뒤에 5를 삽입
// LinkedList의 모든 요소 출력
Console.WriteLine("LinkedList elements:");
foreach (int number in numbers)
{
Console.WriteLine(number); // 출력: 0, 5, 1, 2
}
// 요소 제거
numbers.Remove(5); // 값이 5인 첫 번째 요소를 제거
// 첫 번째 요소 제거
numbers.RemoveFirst();
// 마지막 요소 제거
numbers.RemoveLast();
// 요소 제거 후 LinkedList 출력
Console.WriteLine("After removing elements:");
foreach (int number in numbers)
{
Console.WriteLine(number); // 출력: 1
}
// LinkedList의 크기 확인
Console.WriteLine($"Number of elements: {numbers.Count}"); // 출력: Number of elements: 1
}
}
}
결론
LinkedList<T>는 유연성이 필요한 다양한 상황에서 유용하게 사용될 수 있는 자료구조입니다. 중간 삽입 및 삭제가 빈번하게 발생하는 애플리케이션, 예를 들어 문서 편집기나 실시간 데이터 처리 시스템에서 특히 유리합니다. 그러나 요소에 대한 빠른 임의 접근이 필요한 경우에는 List<T>나 배열을 사용하는 것이 더 효과적일 수 있습니다. 따라서 LinkedList의 사용은 그 특성을 이해하고 적절한 상황에서 선택적으로 활용하는 것이 중요합니다.
반응형