<aside> 💡 필요한 문장으로 판단되는 경우에만 따로 발췌하여 직접 해석해보았으니, 오역이나 어울리지 않는 표현, 불필요한 표현이 있을 수 있습니다.

</aside>

Linked List(링크드리스트)

컴퓨터 사이언스에서, 링크드리스트는 메모리 안에서 물리적인 배치에 의해 순서가 주어진 데이터 요소들의 선형적인 모음들(집합체)이다. (말이 너무 어렵다) 각각의 요소들은 다음 요소를 가리킨다. 그 이유는 데이터 구조에서 노드는 최소한의 단위로 존재한다. 이 노드들은 데이터를 담고 있으며 다른 노드들을 가리킨다. 그리고 이 노드들은 포인터에 의해 움직인다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/58d45f76-5a60-4b03-977f-00809581a3d9/Untitled.png

노드라는 집에는 정보가 담긴 데이터와 레퍼런스(다른 말로, 링크)로 이루어져 있는데, 여기서 레퍼런스(다른 말로, 링크)라는 것이 다음 노드로 가야 된다고 알려주고 있는 것이다. 게임에서 이 퀘스트를 완수하면 다른 퀘스트가 기다리듯이 말이다.

이런 구조는 어떤 동작이 반복되는 동안 순서의 암의의 위치가 어떻든 요소들의 효율적인 삽입과 제거가 가능하게 한다. 반대로, 링크드리스트는 선형적으로(첫번째부터 마지막까지) 하나하나 다 탐색해야 해야한다는 문제점이 있다. 그렇기 때문에 마음대로 원하는 값에 접근하는 것은 실현할 수 없다.

링크드리스트는 lists, stacks, queues, associative arrays, S-expressions 같은 데이터 구조에 흔히 사용된다.

링크드리스트의 주된 장점은 흔히 배열과 비교가 된다. 링크드리스트는 구조를 재할달, 재조직할 필요 없이 삽입과 제거가 가능하다. 왜냐하면 데이터 항목들은 메모리나 디스크에 저장될 필요가 없기 때문이다. 링크드리스트는 리스트 탐색이 가능하기 때문에 어떤 리스트의 노트이든 삽입과 제거가 가능하다. 그러기 때문에 리스트의 길이 도한 증가 및 감소가 필요에 따라 유동적으로 변할 수 있다. 각각의 노드들은 반드시 이전의 노드들을 가리킬 필요까지는 없기에.

단점으로,

  1. 배열보다 메모리를 더 잡아먹는다. 포인터들이 가리키는 주소값을 저장하고 있기 때문이다.
  2. 반드시 리스트의 시작부터 순서대로 탐색해야 된다.
  3. 노드가 메모리나 디스크에 저장될 필요가 없기에, 노드는 리스트에 있는 개별 요소들에 접근하기 위한 시간 소모가 증가된다. (특히, CPU 캐시)
  4. 반대 탐색, 마지막 노드에서 처음 노드까지 반대로 탐색이 어렵다.(singly-list)
    예외로, doubly linked lists는 다소 다루기 쉽다.