C# Linked List

2023. 12. 2. 12:52·C#
반응형

C#의 링크드 리스트는 연결 리스트라고도 불리며, 각 요소가 다음 요소에 대한 포인터를 가지고 있는 구조입니다. 링크드 리스트는 다음과 같은 특징을 가지고 있습니다.

  • 삽입/삭제 작업이 빠릅니다.링크드 리스트에서 삽입/삭제 작업을 수행할 때는 리스트의 요소를 이동할 필요가 없습니다. 따라서, 삽입/삭제 작업은 O(1)의 시간 복잡도를 갖습니다.
  • 검색 작업이 느립니다. 링크드 리스트에서 검색 작업을 수행할 때는 리스트의 모든 요소를 순회해야 합니다. 따라서, 검색 작업은 O(n)의 시간 복잡도를 갖습니다.
  • 메모리 사용이 효율적입니다. 링크드 리스트는 리스트의 요소가 사용되지 않을 때 자동으로 메모리에서 해제됩니다. 따라서, 메모리 사용이 효율적입니다.

구현

링크드 리스트를 구현하기 위해서는 다음과 같은 코드를 사용할 수 있습니다.

public class Node
{
    public int value;
    public Node next;

    public Node(int value)
    {
        this.value = value;
    }
}

public class LinkedList
{
    private Node head;

    public LinkedList()
    {
        this.head = null;
    }

    public void Add(int value)
    {
        Node newNode = new Node(value);

        if (this.head == null)
        {
            this.head = newNode;
        }
        else
        {
            Node currentNode = this.head;
            while (currentNode.next != null)
            {
                currentNode = currentNode.next;
            }

            currentNode.next = newNode;
        }
    }

    public void Remove(int value)
    {
        if (this.head == null)
        {
            return;
        }

        Node currentNode = this.head;
        Node previousNode = null;

        while (currentNode != null)
        {
            if (currentNode.value == value)
            {
                if (previousNode == null)
                {
                    this.head = currentNode.next;
                }
                else
                {
                    previousNode.next = currentNode.next;
                }

                return;
            }

            previousNode = currentNode;
            currentNode = currentNode.next;
        }
    }

    public bool Contains(int value)
    {
        Node currentNode = this.head;

        while (currentNode != null)
        {
            if (currentNode.value == value)
            {
                return true;
            }

            currentNode = currentNode.next;
        }

        return false;
    }
}

이 코드에서 Node 클래스는 링크드 리스트의 각 요소를 나타냅니다. LinkedList 클래스는 링크드 리스트의 헤드 노드를 나타냅니다.

Add() 메서드는 링크드 리스트에 요소를 추가합니다. Remove() 메서드는 링크드 리스트에서 요소를 제거합니다. Contains() 메서드는 링크드 리스트에 특정 요소가 있는지 확인합니다.

 

C#의 링크드 리스트의 활용

링크드 리스트는 다음과 같은 경우에 활용할 수 있습니다.

삽입/삭제 작업이 빈번한 경우 : 링크드 리스트는 삽입/삭제 작업이 빠르기 때문에, 삽입/삭제 작업이 빈번한 경우 유용하게 사용할 수 있습니다. 예를 들어, 게임에서 GameObject를 추가/삭제하거나, 사용자의 입력에 따라 데이터를 추가/삭제하는 경우 링크드 리스트를 활용할 수 있습니다.
메모리 사용이 효율적인 경우 : 링크드 리스트는 리스트의 요소가 사용되지 않을 때 자동으로 메모리에서 해제되기 때문에, 메모리 사용이 효율적인 경우 유용하게 사용할 수 있습니다. 예를 들어, 로그 데이터를 저장하는 경우 링크드 리스트를 활용할 수 있습니다.
순차 접근이 필요하지 않은 경우 : 링크드 리스트는 리스트의 요소에 순차적으로 접근할 수 없습니다. 따라서, 순차 접근이 필요하지 않은 경우 링크드 리스트를 활용할 수 있습니다. 예를 들어, 웹 브라우저의 링크를 저장하는 경우 링크드 리스트를 활용할 수 있습니다.

 

링크드 리스트의 단점

링크드 리스트는 다음과 같은 단점을 가지고 있습니다.

검색 작업이 느립니다. 링크드 리스트에서 검색 작업을 수행할 때는 리스트의 모든 요소를 순회해야 합니다. 따라서, 검색 작업은 O(n)의 시간 복잡도를 갖습니다.
*메모리 사용이 효율적이지 않은 경우 : 링크드 리스트는 리스트의 요소가 사용되지 않더라도 메모리에서 해제되지 않습니다. 따라서, 메모리 사용이 효율적이지 않은 경우 유의해야 합니다.

 

결론

링크드 리스트는 삽입/삭제 작업이 빠르고 메모리 사용이 효율적인 자료구조입니다. 삽입/삭제 작업이 빈번한 경우, 메모리 사용이 효율적인 경우, 순차 접근이 필요하지 않은 경우에 유용하게 사용할 수 있습니다.

저작자표시 비영리 변경금지 (새창열림)

'C#' 카테고리의 다른 글

C# 비트 연산 : enum을 flag로 활용하는 방법  (0) 2023.12.11
C#에서 class와 struct의 차이점  (0) 2023.12.06
C# 11.0의 required modifier  (0) 2023.11.10
C# 6.0 정적 멤버 직접 사용  (2) 2023.11.09
C# 6.0의 catch/finally 블럭에서 await 사용  (0) 2023.11.08
'C#' 카테고리의 다른 글
  • C# 비트 연산 : enum을 flag로 활용하는 방법
  • C#에서 class와 struct의 차이점
  • C# 11.0의 required modifier
  • C# 6.0 정적 멤버 직접 사용
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (672) N
      • 상품 추천 (178) N
      • MongoDB (4)
      • 하드웨어 (11)
      • 일기장 (4)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • 파이썬 (12)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (50)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    learntocode
    스마트스토어리뷰
    카페24리뷰이관
    유니티
    스크립트 실행
    긴유통기한우유
    리뷰이관
    상품 리뷰 크롤링
    codingcommunity
    programming101
    쇼핑몰리뷰
    C#
    스크립트 실행 순서
    devlife
    라떼우유
    Python
    unity
    리뷰관리
    codingtips
    믈레코비타멸균우유
    list
    셀레니움
    cv2
    카페24리뷰
    appdevelopment
    rtsp
    ipcamera
    리스트
    programmerlife
    파이썬
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
C# Linked List
상단으로

티스토리툴바