1. 리스트(List)
- 리스트
- 순서/위치를 갖는 자료들이 차례대로 나열된 선형 자료구조
1.1. 추상 자료형
- 데이터: 같은 유형의 요소들의 순서 있는 모임
- 연산:
is_empty(): 공백 상태이면 true 반환is_full(): 포화 상태이면 true 반환insert(pos, e): pos에 e 추가delete(pos): pos 꺼내서 반환get_entry(pos): pos 꺼내지 않고 반환
1.2. 교재에서 소개된 리스트
-
배열 구조의 리스트
- 요소의 수를 별도로 저장
- 삽입/삭제 시 요소 밀기/당기기 필요
-
단순 연결된 리스트
- 자기참조 구조체(링크 필드) 및 헤드 포인터 사용
- 삽입/삭제 시 링크 필드를 수정
-
이중 연결된 리스트
- 선행 노드와 후속 노드를 가리키는 링크 필드 사용
- 헤드 포인터 외에도 헤드 노드(dummy node)를 사용할 수 있다.
-
이중 연결된 덱
- 이중 연결된 리스트에서 헤드 포인터와 테일 포인터를 함께 사용
2. 연결 리스트(Linked List)
2.1. Time Complexity
- Search: (Linear Search)
- Insert/Delete: 임의 위치에 대하여
2.2. Features
- 메모리 비연속적 저장 (각 노드가 다음 노드 주소를 저장)
- → 인덱스 접근 불가 (Sequential Access)
- → 삽입/삭제가 빠름 (노드 포인터만 수정)
- → 링크 필드 저장으로 인한 메모리 오버헤드
- 동적 크기 할당 (필요에 따라 크기 변화 가능)
2.3. Applications
- Stack, Queue, Deque, Tree, Graph 등 자료구조 구현
- 빈번한 삽입/삭제가 필요한 데이터 (실시간 데이터 처리 등)
- Hash Table에서 Chaining 방식의 Collision 처리에 사용