2021. 12. 9. 16:56ㆍMajor`/자료구조
연결 리스트 (Linked-List)
- 각 상자들을 연결하는 줄 : 포인터로 구현
- 각 상자들 : 노드
- 필요할 때마다 동적 메모리 할당(malloc())을 통해 노드 생성
- 노드 : 데이터 필드/링크 필드로 구성
- 데이터 필드 : data(값) 존재
- 링크 필드 : 다른 노드를 가리키는 포인터 존재 → 포인터를 이용하여 다음 노드에 접근
- 첫 번째 노드를 알면 전체 노드에 접근 가능
- 첫 번째 노드를 가리키는 변수 : 헤드 포인터 (head pointer)
- 마지막 노드의 링크 필드 = NULL (더 이상 연결된 노드 X)
- 실제 메모리 안의 물리적 순서 ≠ 리스트 안의 논리적 순서
연결 리스트의 장단점 (삽입/삭제)
장점
- 삽입/삭제 시 데이터를 이동할 필요가 없다
- 연속된 메모리 공간이 필요가 없다 (필요할 때마다 동적으로 노드 생성)
- 데이터 개수의 제한이 없다
단점
- 구현이 어렵다
- 오류가 발생하기 쉽다
연결 리스트의 종류
[Data Structure] 단순 연결 리스트
단순 연결 리스트 (Singly Linked List) - 단방향 연결 - 마지막 노드의 링크값 = NULL - 헤드 포인터 : 연결 리스트의 맨 처음 노드를 가리키는 포인터 단순 연결 리스트 ADT void insert_node(s_listnode **hea..
cs-ssupport.tistory.com
[Data Structure] 원형 연결 리스트
원형 연결 리스트 (Circular Linked List) - 마지막 노드의 링크가 첫 번째 노드의 주소를 가리키는 리스트 - 하나의 노드에서 모든 노드에 접근 가능 - 헤드 포인터가 항상 마지막 노드를 가리키게 설
cs-ssupport.tistory.com
[Data Structure] 이중 연결 리스트
이중 연결 리스트 (Doubly Linked List) - 링크가 양방향 이기 때문에 양방향 검색이 가능 - 삽입/삭제시 반드시 선행 노드가 필요 - 공간을 많이 차지하고 코드가 복잡하다 - 헤드 노드를 보유 - 헤드
cs-ssupport.tistory.com