-
C# 프로그래밍의 기초: LinkedList2024년 08월 24일
- 유니얼
-
작성자
-
2024.08.24.:08
728x90LinkedList<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의 사용은 그 특성을 이해하고 적절한 상황에서 선택적으로 활용하는 것이 중요합니다.
반응형다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드
받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이
감지되어도 모달 창이 표시되지 않습니다.)