Skip to content

Latest commit

Β 

History

History
136 lines (86 loc) Β· 2.66 KB

File metadata and controls

136 lines (86 loc) Β· 2.66 KB

Linked List


img

연속적인 λ©”λͺ¨λ¦¬ μœ„μΉ˜μ— μ €μž₯λ˜μ§€ μ•ŠλŠ” μ„ ν˜• 데이터 ꡬ쑰

(포인터λ₯Ό μ‚¬μš©ν•΄μ„œ μ—°κ²°λœλ‹€)

각 λ…Έλ“œλŠ” 데이터 ν•„λ“œμ™€ λ‹€μŒ λ…Έλ“œμ— λŒ€ν•œ μ°Έμ‘°λ₯Ό ν¬ν•¨ν•˜λŠ” λ…Έλ“œλ‘œ ꡬ성


μ™œ Linked Listλ₯Ό μ‚¬μš©ν•˜λ‚˜?

배열은 λΉ„μŠ·ν•œ μœ ν˜•μ˜ μ„ ν˜• 데이터λ₯Ό μ €μž₯ν•˜λŠ”λ° μ‚¬μš©ν•  수 μžˆμ§€λ§Œ μ œν•œ 사항이 있음

  1. λ°°μ—΄μ˜ 크기가 κ³ μ •λ˜μ–΄ μžˆμ–΄ 미리 μš”μ†Œμ˜ μˆ˜μ— λŒ€ν•΄ 할당을 λ°›μ•„μ•Ό 함

  2. μƒˆλ‘œμš΄ μš”μ†Œλ₯Ό μ‚½μž…ν•˜λŠ” 것은 λΉ„μš©μ΄ 많이 듬 (곡간을 λ§Œλ“€κ³ , κΈ°μ‘΄ μš”μ†Œ μ „λΆ€ 이동)

μž₯점

  1. 동적 크기

  2. μ‚½μž…/μ‚­μ œ 용이

단점

  1. μž„μ˜λ‘œ μ•‘μ„ΈμŠ€λ₯Ό ν—ˆμš©ν•  수 μ—†μŒ. 즉, 첫 번째 λ…Έλ“œλΆ€ν„° 순차적으둜 μš”μ†Œμ— μ•‘μ„ΈμŠ€ 해야함 (이진 검색 μˆ˜ν–‰ λΆˆκ°€λŠ₯)

  2. ν¬μΈν„°μ˜ μ—¬λΆ„μ˜ λ©”λͺ¨λ¦¬ 곡간이 λͺ©λ‘μ˜ 각 μš”μ†Œμ— ν•„μš”

λ…Έλ“œ κ΅¬ν˜„μ€ μ•„λž˜μ™€ 같이 데이터와 λ‹€μŒ λ…Έλ“œμ— λŒ€ν•œ 참쑰둜 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€

// A linked list node 
struct Node 
{ 
  int data; 
  struct Node *next; 
}; 

Single Linked List

λ…Έλ“œ 3개λ₯Ό μž‡λŠ” μ½”λ“œλ₯Ό λ§Œλ“€μ–΄λ³΄μž

      head         second         third 
        |             |             | 
        |             |             | 
    +---+---+     +---+---+     +----+----+ 
    | 1  | o----->| 2 | o-----> |  3 |  # | 
    +---+---+     +---+---+     +----+----+

μ†ŒμŠ€ μ½”λ“œ



λ…Έλ“œ μΆ”κ°€

  • μ•žμͺ½μ— λ…Έλ“œ μΆ”κ°€
void push(struct Node** head_ref, int new_data){
    struct Node* new_node = (struct Node*) malloc(sizeof(struct Node));

    new_node->data = new_data;

    new_node->next = (*head_ref);

    (*head_ref) = new_node;
}

  • νŠΉμ • λ…Έλ“œ λ‹€μŒμ— μΆ”κ°€
void insertAfter(struct Node* prev_node, int new_data){
    if (prev_node == NULL){
        printf("이전 λ…Έλ“œκ°€ NULL이 μ•„λ‹ˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.");
        return;
    }

    struct Node* new_node = (struct Node*) malloc(sizeof(struct Node));

    new_node->data = new_data;
    new_node->next = prev_node->next;

    prev_node->next = new_node;
    
}

  • 끝μͺ½μ— λ…Έλ“œ μΆ”κ°€
void append(struct Node** head_ref, int new_data){
    struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));

    struct Node *last = *head_ref;

    new_node->data = new_data;

    new_node->next = NULL;

    if (*head_ref == NULL){
        *head_ref = new_node;
        return;
    }

    while(last->next != NULL){
        last = last->next;
    }

    last->next = new_node;
    return;

}