앞선 시간에 우리는 배열에 대해 공부하였습니다.
그런데 배열의 단점은 크게 두가지가 있습니다.
1. 배열의 크기가 가변적이지 않다.
2. 배열 내부의 원소를 추가 또는 삭제를 할려면 원소들을 이동시키는데에 있어서 시간이 소요된다.
그래서 이런 점을 보안한 Linked List라는 자료구조를 소개한다.
Linked List란 선형구조의 형태로 형성되는 node의 집합이라고 한다.
각 노드는 데이터를 담당하는 부분과 다음 node의 주소를 참조하는 부분으로 나누어져있다.
Singly Linked List(단일 연결 리스트)는 다음과 같은 형식으로 이루어져있다.
위와 같은 그림에서 첫번째 node를 Head , Null(맨 마지막)을 가리키는 node를 Tail이라고 부른다.
만약 Singly Linked List의 Tail을 찾기위해서는 Head에서 시작하여 다음 Node를 찾아가는 과정을 반복하여 Tail을 찾을 수 있는데 위와 같은 방법을 Link hopping 또는 Pointer Hopping 이라 부른다.
Algorithm addFirst(e){
newNode = Node(e)
newNode.next = head
head = newNode
size = size+1
}
Algorithm addLast(e){
newNode = node(e)
tail.next = newNode
tail = newNode
size = size+1
크기가 가변적이어서 자료를 내가 원하는 만큼 넣거나 뺄수 있다.
Circular Linked List란 Singly Linked List와 Tail의 다음 Node를 가리키는 주소를 Head로 가리키게 하는 점을 합친 Linked List를 말한다.
Double Linked List란 데이터를 담는부분, 다음 Node의 주소를 담는부분 , 이전 Node의 주소를 담는 부분을 포함한 Node로 이루어진 Linked List를 말한다.
위 그림에서는 Prev는 이전 Node에 대한 주소를 담는부분, Next는 다음 Node에 대한 주소를 담는 부분을 말한다.
혹시 잘못 설명된 부분이 있거나 빠진 곳이 있다면 댓글로 남겨주세요 :)