방명록
- 연결 리스트2020년 08월 24일 23시 03분 58초에 업로드 된 글입니다.작성자: sue24
Linked List
- 선형의 자료 구조
- 요소들이 연속적인 메모리 공간에 저장된 것이 아니다
- 각각의 요소들은 pointer로 연결되어 있다
- 연결 리스트의 순서는 각 요소의 pointer에 의해 결정된다.
- 첫 번째 노드를 head라고 한다.
연결 리스트가 비어있으면 head는 NULL이다. - 마지막 노드를 tail이라고 한다.

Algorithms by Robert Sedgew VS array
배열과 연결 리스트는 선형의 자료 구조로 비슷한 점이 많지만
다른 점이 두 가지 있다.
- 크기
- 배열의 크기는 고정되어 있지만,
연결 리스트의 크기는 유동적이다.
- 배열의 크기는 고정되어 있지만,
- 삽입/삭제
- 배열은 삽입 및 삭제가 비싼 작업이라고 할 수 있다.
크기와도 연관되는 이야기로 크기가 고정되어 있으므로
새로운 요소를 삽입하려면 새로운 공간을 만들어야 하기 때문이다.
- 배열은 삽입 및 삭제가 비싼 작업이라고 할 수 있다.
- 조회
- 연결 리스트는 원하는 인덱스를 바로 조회할 수 없다.
첫 번째 노드부터 순서대로 찾아가야 하기 때문이다.
- 연결 리스트는 원하는 인덱스를 바로 조회할 수 없다.
연결 리스트는 pointer를 위한 메모리가 필요하고 캐시와 같이 작업하기도 불편하다.
연결 리스트의 종류
- 단일 연결 리스트
각 요소는 key와 next pointer를 가진다. - 이중 연결 리스트
단일 연결 리스트는 다시 앞으로 갈 수 없으므로
이중 연결 리스트를 사용한다.
각 요소는 key와 prev, next pointer를 가진다. - 원형 연결 리스트
head의 prev가 tail을 가리키고
tail의 next가 head를 가리킨다. - sorted
key를 순서대로 정렬한 연결 리스트 - unsorted
L은 linked list, k는 요소의 key
조회
list-search(L, k) x = L.head while x != NULL and x.key != k x = x.next return x연결 리스트 L의 노드들 중에서 k를 키로 가지는 첫 번째 노드를 찾는다.
연결 리스트는 첫 노드부터 순서대로 조회해야 하기 때문에 비효율적이다.
O(n)
삽입
list-insert(L, x) x.next = L.head if L.head != NULL L.head.prew = x L.head = x x.prev = NULL연결 리스트 헤드에 새로운 데이터가 삽입된다.
새로 삽입하는 노드의 next가 기존의 head를 가리킨다.
삽입하고자 하는 위치가 정해져 있지 않다면 시간은 O(1)
원하는 위치가 있다면 조회를 먼저 해야 한다.
삭제
list-delete(L, x) if x.prev != NULL x.prev.next = x.next else L.head = x.next if x.next != NULL x.next.prev = x.prev연결 리스트 헤드가 삭제된다.
삭제하고 하는 위치가 정해져 있다면 조회를 먼저 해야 한다.
'알고리즘' 카테고리의 다른 글
math 모듈1 (0) 2020.08.18 LIST (0) 2020.08.05 BIg-O (0) 2020.08.02 Computational Thinking이 필요한 이유? (0) 2019.10.07 다음글이 없습니다.이전글이 없습니다.댓글