포도가게의 개발일지

연결리스트(1)add_first 함수 이해 본문

자료구조

연결리스트(1)add_first 함수 이해

grape.store 2021. 7. 1. 00:41
반응형
더보기

#include 
#include 

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

void addFirst(struct node *head1, int data) // head1 head노드의 주소값
{
    struct node *newNode = malloc(sizeof(struct node));
    newNode->next = head1->next; //1번 2번노드 연결되어잇을때 1.5번노드를 사이에 넣어주기위해 1번노드에 저장되있던2번주소를 1.5번에 넣어줌
    
    head1->next = newNode;//1.5번주소를 1번 next에 넣어줌
    newNode->data = data;//1.5번 data 입력
    
    
    
}

int main(void)
{
    struct node *head = malloc(sizeof(struct node));
    head->next = NULL;
    
    addFirst(head,10); // data 순서 0(head) 10
    addFirst(head,20); // 0 20 10
    addFirst(head,30); // 0 30 20 10
    
    struct node *target = head->next;
    
    while(target != NULL)
    {
        printf("1:%d\n",target->data);
        struct node *temp = target->next; // 다음 노드의 헤드값을 임시저장 ex) 2->3번노드 일때 3번헤드값저장
        free(target); // 현재 노드 메모리 할당 해제 ex) 2번 노드 메모리 해제
        target = temp;   // 3번노드 주소를 넣어줌으로써 3번 노드로 이동 그리고 반복
    }
    
    free(head);
    
    return 0;
}

1.node를 이순서로 추가해 줄 경우 뒤에 오는 node들과의 연결이 끊어져 잃어버릴 수 있습니다. 때문에

새로 추가할 newNode->next에 원래 다음에 왔어야 할 node에 헤드값을 넣어줌으로써 연결된 리스트들을 잃어버리는 것을 방지할수 있습니다. 마지막으로

head->next에 새로 만들어진 newNode에 헤드값을 넣어 줌으로써 말 그대로 add_first 헤드 다음으로 오는 선행에 node들을 추가 할 수있습니다. 이와 반대로 마지막에 node들을 추가하는 함수도 있습니다. 아마 그 함수는 단지 마지막 노드에 다으 newnode의 헤드값을 넣고 newnode->next에 NULL처리만 하면 될 것 입니다.

'자료구조' 카테고리의 다른 글

위상정렬 & 백준 2252 줄세우기  (0) 2021.08.20
stack or queue로 구현한 (DFS & BFS )  (0) 2021.08.10
Merge sort(병합 정렬)  (0) 2021.07.13
Quick Sort(퀵 정렬)  (0) 2021.07.09
연결 LIST  (0) 2021.06.24
Comments