ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [삼쾌한 IT강의 ]구조체와 연결리스트
    C언어/이론 2019. 2. 15. 16:01


     안녕하세요! 삼쾌한 IT강의 백소라강사입니다. 

    오늘은 연결리스트에 대해 포스팅 해 보도록 하겠습니다.


     우선 연결리스트 이야기를 하기전에 배열에 대한 언급을 잠시 하고 넘어가야겠네요. 배열을 이용해서 같은 자료형의 데이터들을 묶어서 사용할 수 있다고했어요. 그리고 아래 그림과 같이 데이터들이 연속된 공간에 저장이 되어있다는걸 알 수 있었죠. 



    하지만 그렇기 때문에! 데이터를 추가하거나 삭제하기가 번거롭다고 했어요. 만약 1번 인덱스에 있는 값을 삭제하려면? 삭제는 할 수 있지만 연속된 데이터들의 값이 있기 때문에 뒤에 있는 데이터들을 앞으로 당겨와야겠죠. 중간에 데이터를 삽입할 때도 마찬가지에요. 이런 단점을 보완하고자! 우리는 연결리스트라는걸 사용할 수가 있습니다.

     연결리스트는 위의 그림을 보시면 데이터들이 한군데에 모여있는게 아니라 여기저기 물리적으로 떨어져있죠? 그럼 각각의 데이터들을 어떻게 연결할까요? 보시다시피 연결링크, 연결 선이 있어서 링크를 통해 연결됩니다! 우리가 이 연결 링크들이 포인터와같이 다음 데이터를 '가리킨다'고 보시면 되겠죠?!

     그리고 데이터를 중간에 삽입, 삭제할때는! malloc으로 '동적 메모리'를 할당해서 삽입할 수 있고 메모리를 반납해서 삭제할수가 있을거에요.


     위에 A 부터 D라고 써있는 상자들을 '노드' 라고 부를 수 있는데 이 노드는 데이터필드와 링크필드로 이루어져있습니다.  이렇게 말이죠!


     data 필드에 데이터가 들어가고 link 필드는 포인터처럼 가리키는 곳의 주소를 가지고 있다고 보면 되겠죠. 

     노드는 전체적으로 이런 형식으로 이루어져있습니다. 

    1. data가 없는 헤드포인터 : 노드를 가리키는 역할만 합니다.

    2. 데이터와 링크를 둘다 가지는 노드

    3. 데이터만 가지는 노드 : 더이상 가리킬 곳이 없습니다. 


     다시 그림으로 확인 해 볼까요??



     헤드포인터는 data 부분이 없고, Node 1부분의 링크부분을 보시면 Node2를 가리키고 있는걸 볼수가 있죠? 그리고 Nod2는 Node3을 가리키고 Node3은 가리키는곳이 없으니 NULL값이 들어있습니다. 


     이렇게 구조체 연결리스트는 줄줄이 쏘세지같은! 그런 느낌이라고 보시면 됩니다. 

    이상 구조체 연결리스트에 대한 설명을 마치겠습니다 ! 


     포스팅이 도움이 됐다면?! 공감버튼을 눌러주세요! 댓글은 센스 :) 감사합니다.

    댓글

Designed by Tistory.