-
📌 연결리스트의 개념
💡 자기참조 구조체
- 동일한 타입의 구조체에 대한 포인터를 속성으로 포함하는 구조체
- Link
- Node 구조체에 대한 포인터 -> 메모리의 주소를 가리키는 자료형
- 여러 개의 Node 구조체를 연결하는 역할
💡 연결리스트
- 단순 연결리스트(Singly Linked List)
- 자기 참조 구조체(Node)들의 연결
- 천번째 노드에 대한 포인터만 유지
- 리스트의 이름 = 첫번째 노드의 수조
- 이후 노드들은 구조체의 Link 포인터를 통해 참조
- 마지막 노드의 Link 포인터는 NULL로 설정한다.
- 다른 연결리스트
- 이중 연결 리스트(Doubly Linked List)
- 앞 뒤의 노드들의 정보를 가지고 있다.
- 원형 연결 리스트(Circular Linked List)
- 마지막 노트와 첫노드를 연결
- 연결리스트 연산 - 순회
- 연결리스트의 길이 계산
- 각각의 노드를 정확히 한번만, 체계적인 방법으로 방문하는 과정
- 삽입 및 삭제를 하더라도 노드의 위치는 달라지지 않는다.
💡 배열과 연결 리스트의 비교
- 저장 방식의 차이 -> 메모리의 인접한 곳에 저장한다.
- 배열 : int Array[4];
- 다음 데이터에 대한 주소를 알 필요가 없다.
- 연결리스트 : struct node에 대한 네 번의 malloc
- 각 노드들은 메모리의 여러 곳에 나누어 저장한다.
- Link를 이용하여 다음 노드의 주소를 유지한다
- 메모리 사용 측면
- 저장될 데이터의 수를 안다면 배열이 효과적이다.
- 데이터의 수를 모를 경우, 연결리스트가 유리하다.
- 새로 데이터가 입력될 때마다, malloc 실행 후 연결
- 정렬된 데이터의 순서 유지
- 배열
- 데이터가 추가될 때 기존 데이터의 위치 변경이 가능하다.
- 이진 검색이 가능하다.
- 연결리스트
- 기존 데이터의 위치 변경은 발생하지 않는다.
- 이진 검색이 불가능하다.