본문 바로가기

컴퓨터 기본 개념

연결리스트

<연결리스트의 필요성>

- 일반적으로 배열을 사용하여 데이터를 순차적으로 저장하고, 나열할 수있다.

- 배열을 사용하는 경우 메모리 공간이 불필요하게 낭비될 수 있다.

 

<배열기반리스트의 특징>

- 배열로 만들었으므로 특정한 위치의 원소에 즉시 접근할 수 있다는 장점이 있다.

- 데이터가 들어갈 공간을 미리 메모리에 할당해야 한다는 단점이 있다.

- 원하는 위치로 삽입이나 삭제가 비효율적

 

 

<연결리스트>

- 일반적으로 연결리스트는 구조체와 포인터를 함께 사용하여 구현한다.

- 연결리스트는 리스트의 중간 지점에 노드를 추가하거나 삭제할 수 있어야 한다.

- 필요할 때마다 메모리 공간을 할당 받는다.

- 포인터를 이용해 단방향적으로 다음 노드를 가리킨다.

- 일반적으로 연결 리스트의 시작 노트를 헤드(Head)라고 하며 별도로 관리한다.

- 다음 노드가 없는 끝 노드의 다음 위치값으로는 NULL을 넣는다.

 

<코드구현>

#include <stdio.h> 
#include <stdlib.h>

//연결 리스트 구조체 만들기
typedef struct { 
    int data; 
    struct Node *next; 
} Node;

Node *head;

//연결 리스트 삽입함수
void addFront(Node *root, int data) { 
    Node *node = (Node*) malloc(sizeof(Node)); 
    node->data = data; 
    node->next = root->next; 
    root->next = node; 
}

//연결 리스트 삭제함수
void removeFront(Node *root) { 
    Node *front = root->next; 
    root->next = front->next; 
    free(front); 
}

//연결 리스트 메모리 해제 함수
void freeAll(Node *root) { 
    Node *cur = head->next; 
    while (cur != NULL) { 
        Node *next = cur->next; 
        free(cur); 
        cur = next; 
    } 
}

//연결 리스트 전체 출력 함수
void showAll(Node *root) {
    Node *cur = head->next; 
    while (cur != NULL) { 
        printf("%d ", cur->data); 
        cur = cur->next; 
    } 
}

// 완성된 연결 리스트 사용하기
int main(void) { 
    head = (Node*) malloc(sizeof(Node)); 
    head->next = NULL; 
    addFront(head, 2); 
    addFront(head, 1); 
    addFront(head, 7); 
    addFront(head, 9); 
    addFront(head, 8); 
    removeFront(head); 
    showAll(head); 
    freeAll(head); 
    system("pause"); 
    return 0; 
}

 

 

'컴퓨터 기본 개념' 카테고리의 다른 글

보안 개념 3가지  (0) 2020.10.05
프론트기술을 배워야 하는 이유  (0) 2020.08.24
연결리스트  (0) 2020.08.08
17장. 구조체  (0) 2020.07.30
14장. 다차원 배열과 포인터 배열  (0) 2020.07.29
15강. 동적메모리할당  (0) 2020.07.28