ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자료구조 최종정리 : 리스트(단일, 원형)
    @ 16. 1 ~ 17. 1/자료구조 2014. 9. 10. 23:46

    리스트는 배열 리스트, 포인터 리스트로 구성할 수 있다.

    배열리스트 소스

     

    포인터 리스트는 3개로 나뉜다.

    1. 단일 연결리스트

    2. 원형 연결리스트

    3. 이중 연결리스트

     

    일단 단일 연결리스트..소스

     

    단일 연결리스트는 헤드노드를 이용해서 만든것이고

    밑에 이제 원형리스트의 경우 헤드포인터를 이용해서 만들 예정인데..헤드포인터의 경우 더 만들기 어렵다

    더미 노드를 하나 만듬으로써, 어느곳에 추가하여도 더미가 없는 것에서의

    중간에서 추가하는 논리와 같아진다? 이게 뭔말이지...

     

    더미노드라고 해서..위에 단순 연결처럼 객체가 아닌..

    포인터를 동적할당해서 더미노드로 활용해도 될것같다..

    ..

    아..아 정리하면 말이다...

    더미노드가 없으면... 노드를 추가 삭제 그리고 조회하는 방법에 있어서 첫 번쨰 노드와 두번 째 이후의 노드에 차이가 있다.

    (왜냐면...모르잖아 이게 첨인지 중간인지..젠장..ㅠ아닌가)

    하지만 더미노드가 생기면 처음추가되는 노드가 구조상 두번 째 노드가 되니까.. 노드의 추가 삭제 및 조회의 과정을 일관되게 구현할 수 있다.

    노드를 추가 시킬때

    더미가 있다면

    새로운 노드는 head가 가리키는 노드를 가리키고 head는 새로운 노드를 가리키면 된다.

    newnode->next=head->next

    head->next=newnode

     

    하지만 더미노드가 없으면..head는 평상시 null을 품고 있다가..

    새로운 노드를 처음 추가될때는 그냥 head가 새로운노드를 품으면 된다.

    head=newnode;

     

    그 다음에 추가할때가 달라질텐데..(두번쨰부터는..)

    head는 기존 노드를 품고 있으니까 새로운 노드는 head가 품었던 노드를 가리키고

    newnode->next=head;

    head는 새로운 노드를 품어야 한다.

    head=newnode;

    따라서 연결리스트가 비어있을때와 추가될떄가 다르다..그래서 따로 처리해야한다..

     

    아아..품는다와 가리키다는 분명히 다르다 여기서

    품는다는

    head=newnode를 말하고

    가리키다는

    head->next=newnode다

    아아...이해가 조금되었다..

     

    원형 리스트

     

    내용상에 틀린점이 있으면..말해주세요..다시보니..저도 이해가 될듯 말듯하네요..

Designed by Tistory.