happyso
study with happyso
happyso
전체 방문자
오늘
어제
  • 분류 전체보기 (302)
    • GIT (3)
    • 컴퓨터 기본 개념 (29)
    • 알고리즘 (125)
      • 알고리즘 문제 (115)
      • 알고리즘 개념 (10)
    • Go (2)
    • 클라우드 (54)
      • DevOps (4)
      • Kubernetes(쿠버네티스) (33)
      • AWS (6)
      • CKA (8)
    • 리눅스(Linux) (18)
      • 컨테이너(Container) (8)
    • Front (22)
      • JavaScript (2)
      • React (20)
    • Python (21)
      • Python 웹 크롤링 (11)
      • Django (7)
      • MachineLearning (3)
    • 데이터베이스 (6)
      • MariaDB (2)
      • MongoDB (4)
    • C언어 (5)
    • Trouble Shooting (2)
    • 네트워크 (8)
      • CCNA (5)
    • 보안 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 18
  • apply
  • edit
  • Patch
  • kubernetes
  • 15
  • replace

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
happyso

study with happyso

컴퓨터 기본 개념

연결리스트

2020. 8. 8. 20:09

<연결리스트의 필요성>

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

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

 

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

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

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

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

 

 

<연결리스트>

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

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

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

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

- 일반적으로 연결 리스트의 시작 노트를 헤드(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
17장. 구조체  (0) 2020.07.30
14장. 다차원 배열과 포인터 배열  (0) 2020.07.29
15강. 동적메모리할당  (0) 2020.07.28
    '컴퓨터 기본 개념' 카테고리의 다른 글
    • 보안 개념 3가지
    • 프론트기술을 배워야 하는 이유
    • 17장. 구조체
    • 14장. 다차원 배열과 포인터 배열
    happyso
    happyso

    티스토리툴바