방명록
- 연결 리스트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 다음글이 없습니다.이전글이 없습니다.댓글