[자료구조 - C언어] 자료구조 제11강: 연결 리스트 - 개념과 기본 동작들(2)

2022. 9. 20. 16:52CS/자료구조

728x90

//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎

 

 

1. 연결 리스트 예제프로그램

  • 연결 리스트는 노드 10개를 미리 만들어두고 사용하지 않고
    • 필요한 그때그때마다 노드를 만들어서 연결 리스트에 추가한다.
  • 연결 리스트 예제프로그램 목표

struct node{
    char * data;
    struct node * next;
};

typedef struct node Node;
Node *head = NULL;

 

1-1. 2nd

int main(){

    //어떤 구조체를 가리키는 포인터 head
    Node *head = (Node *)malloc(sizeof(Node));
    //head가 가리키는 구조체 안의 data 멤버를 엑세스할 때 화살표 연산자를 쓴다.
    //head->data = "2nd";
    head->data = "2nd";
    //head가 가리키는 구조체는 첫 번째이자 마지막 노드이기 때문에 NULL 저장
    //마지막 노드임을 표시
    head -> next = NULL;
    
}

 

1-2. 3rd

    //새로 만드는 노드의 주소를 가리키는 q
    Node *q = (Node *)malloc(sizeof(Node));
    q -> data = "3rd";
    q -> next = NULL;
    
    //2nd -> 3rd의 순서를 가지려면
    //2nd 노드의 주소 필드가 3rd를 가리켜야 한다.
    //2nd 노드의 주소 필드 접근: head -> next
    //3rd를 가리키려면: head -> next = q(새로 만드는 노드의 주소를 가지고 있음)
    head -> next = q;

 

1-3. 1st

    //앞서 사용했던 q는 쓰임이 다했기 때문에 재활용
    q = (Node *)malloc(sizeof(Node));
    q -> data = "1st";
    //1st를 가장 앞에 연결해야 1st-2nd-3rd의 순서를 가짐
    //2nd의 주소는 head가 가지고 있다.
    //1st 노드의 주소 필드 접근: q -> next
    //2nd의 주소를 가리키려면: q -> next = 2nd
    q -> next = head;
    //첫 번째 노드의 주소를 보관   하는 head
    head = q;

 

1-4. 출력

    //현재 head에 저장된 값은 첫 번째 노드의 주소를 저장
    //p가 첫 번째 노드를 가리킴
    //head를 바로 사용하지 않는 이유
    //마지막에 head가 가리키는 값이 NULL이 되면
    //연결리스트의 첫 번째 노드의 주소를 보관할 수 없게 됨
    Node *p = head;
    while(p != NULL){
        printf("%s\n", p->data);
        //현재 p가 가리키고 있는 노드의
        //next필드에 저장된 값(그 다음 노드의 주소)을 p에 써라

        //=> p가 한 칸 앞으로 전진
        p = p -> next;
    }

 

 

 

 


부경대학교 권오흠 교수님의 [c로 배우는 자료구조 및 여러 가지 예제 실습] 강의 정리입니다. 감사합니다.

https://www.youtube.com/watch?v=BP9lJ-Fq72w 

 

728x90