자료구조

Linked List

728x90

Linked List

Linked List 란 그들의 메모리 주소값으로 연결되는 선형적인 데이터 collection 이라고 할 수 있습니다.
그러므로 모든 Node 는 next position 을 가집니다.
대부분 data 와 nextnode 의 reference 를 가집니다. Node 를 python code 로 표현하면 아래와 같습니다.

class Node(object):

    def __init__(self, data):
        self.data = data
        self.next = None

LinkedList 는 여러가지 자료구조 형태가 있습니다 SingleLinkedList, Doubly Linked List 등등 Queue 를 구현하는 자료구조로 이용되기도 합니다.
LinkedList 는 선형적인 구조를 지니고 있으므로, 탐색 및 추가 및 제거에 O(n) Time Complexity 를 가집니다.

LinkedList 의 장점은 표준 array 에 비해서 쉽게 데이터를 추가하거나 삭제할 수 있다는 것입니다. 만약 array 의 size 를 키우려면, 아예 데이터 구조를 다시 복사해서 더큰 배열로 복제하는 식의 형태가 이뤄져야 할 것입니다. 왜냐하면 Array 의 원소들이 인접한 지역에 위치하는 특성이 있기 때문입니다. 하지만 LinkedList 는 메모리상에서 인접한 지역에 Node 들이 존재할 필요가 없으므로, 쉽게 추가하거나 삭제할 수 있습니다.하지만 이로 인해 얻는 단점도 있습니다. 언제나 TradeOff 가 존재하듯이.

Linked List Basic Concept

  • Linked List 자료구조 안의 원소들은 element 혹은 Node 로 명명합니다.
  • 안의 Node 또는 element 들은 next_node 의 link 인 next_pointer 또는 next_link 를 가져야 합니다. 노드가 지니고 있는 데이터 필드는 data, cargo, information, value, payload 등등 으로 명명할 수 있습니다.
  • head 는 LinkedList 의 첫번째 노드를 나타냅니다.
  • tail 은 LinkedList 의 종단 노드를 나타냅니다.

Singly Linked List

단일 연결 리스트(Singly Linked List)안의 Node 는 data 와 next filed 를 가집니다.

Python Singly Linked List

INSERT OR DELETE TIME COMPLEXITY

image

INSERT 나 DELETE 를 시도할때 insert_after 나 deleteAfter 로 접근시 O(1)로 가능하다.

  # O(1) Time Complexity
    def append_after(self, prevNode, afterNode):
        afterNode.next = prevNode.next
        prevNode.next = afterNode

  # O(1) Time Complexity
    def remove_after(self, node):
        prenode = node.next
        node.next = node.next.next
        prennode = None
  • 음 그런데 해당 노드로 붙어서 삭제하려면 결국 O(N) 으로 Singly 에서는 될수 밖에 없어서 이때는 Doubly Linked List 를 써야한다. Singly 에서는 O(1) 으로 밖에 할 수 없다. (중간 값을 지운다는 가정 하)

'자료구조' 카테고리의 다른 글

INSERTION-SORT  (0) 2022.06.05