본문 바로가기
자료구조

[자료구조] 6장. 연결 리스트 설명과 구현 (Linked List)

by 팔공산호랑이 2020. 4. 10.

--------------------------------------------

--------------------------------------------

연결리스트는

배열의 한계를 극복해줍니다.

배열은 길이가 한정되어있지만

연결리스트는

동적할당을 이용하여 계속적으로 요소를 추가하기 때문에

길이의 제한이 없습니다.

--------------------------------------------

 

--------------------------------------------

우선 연결리스트를 만들기 위해

이런 구조체가 필요 합니다.

구조체의 요소는

데이터가 들어갈 정수 변수와

다음 구조체 요소의 주소를 가지는 구조체 포인터 입니다.

--------------------------------------------

이 구조체 포인터에

다음 노드의 주소가 담깁니다.

--------------------------------------------

연결리스트의 사용법은 동적할당으로

노드를 생성하여

연결하는 방식입니다.

--------------------------------------------

이렇게 첫번째 노드를 만들고

--------------------------------------------

추가하는 방향은 설정하기 나름이고

여기선 오른쪽 방향으로 추가되도록 해주었습니다.

--------------------------------------------

계속 이런식으로 오른쪽에 추가해서 이어줍니다.

그러므로 연결리스트는 배열과 달리 길이의 제한이 없습니다.

원하는 개수만큼 계속 추가할수 있기 때문입니다.

다만 메모리 제한은 있습니다.

--------------------------------------------

--------------------------------------------

이런식으로

동적할당을 이용해서 노드를 생성하고 주소를 반환하여

기본적인 노드 구조를 만들어 주고

데이터를 넣습니다.

--------------------------------------------

그 다음

노드 N1의 구조체 포인터 LINK

다음 노드의 주소값인 N2값을 넣고

노드 N2의 구조체 포인터 LINK

다음 노드의 주소값인 N3값을 넣고

노드 N3의 구조체 포인터 LINK

NULL값을 넣어서

끝맺음을 해줍니다.

--------------------------------------------

많은 일반적인 책에선 생략된 형태가 많이 나오기 때문에.

제대로된 이해를 위해서

좀 더 정확한 형태를 그려보겠습니다.

--------------------------------------------

밑줄친 이 부분은

동적할당으로 영역에 노드를 생성해서

주소를 노드 포인터에 반환한 것이므로

노드 포인터가 동적할당된 메모리 영역을 가리키는 모양이 됩니다.

--------------------------------------------

이런식으로

노드 포인터 N1힙영역 메모리를 가리키는 모양이 됩니다.

--------------------------------------------

--------------------------------------------

이런식으로

동적할당으로 노드를 생성한다음

데이터를 넣어줍니다.

--------------------------------------------

이것을 그림으로 나타내면

이렇게 그릴수 있습니다.

--------------------------------------------

다음으로

노드끼리 연결해줍니다.

자세하게 살펴보면

--------------------------------------------

N1의 링크에는 다음 노드의 주소인

N2값이 들어갑니다.

N2에는 동적할당한 노드의 주소가 들어있습니다.

이렇게 하면 노드 N1노드 N2가 연결됩니다.

노드 N1의 링크가 노드 N2를 가리키게 됩니다.

--------------------------------------------

이런식으로

노드 N1노드 N2가 연결됩니다.

--------------------------------------------

N2의 링크에는 다음 노드의 주소인

N3값이 들어갑니다.

N3에는 동적할당한 노드의 주소가 들어있습니다.

이렇게 하면 노드 N2노드 N3가 연결됩니다.

노드 N2의 링크가 노드 N3를 가리키게 됩니다.

--------------------------------------------

그림을 그리면 이런식으로 표현할 수 있습니다.

--------------------------------------------

마지막으로 N3의 링크에 널 포인터를 넣어주고 마무리를 합니다.

일반적으로 노드의 끝에는 널포인터를 넣어서 마무리를 하게 됩니다.

일종의 마감처리라고 할 수 있습니다.

--------------------------------------------

그러면 비로소 이렇게 마무리가 되고

모든 노드들이 안정적으로 연결 되었습니다.

노드 구조체를 이용한 연결리스트 구조는

동적할당을 이용한 자료구조 구현의 기본재료가 됩니다.

그러니 정확하게 그림으로 이해하고 많이 활용하면 되겠습니다.

--------------------------------------------