logo

데이터 구조 소개

컴퓨터가 발명된 이후 사람들은 ''라는 용어를 사용해 왔습니다. 데이터 '는 전송되거나 저장된 컴퓨터 정보를 나타냅니다. 그러나 주문 유형에도 존재하는 데이터가 있습니다. 데이터는 종이에 적힌 숫자나 텍스트일 수 있으며, 전자 장치의 메모리 내부에 저장된 비트와 바이트 형태일 수도 있고, 사람의 마음 속에 저장된 사실일 수도 있습니다. 세계가 현대화되기 시작하면서 이 데이터는 모든 사람의 일상 생활에서 중요한 부분이 되었고, 다양한 구현을 통해 데이터를 다르게 저장할 수 있었습니다.

데이터 사실과 수치의 모음, 또는 단일 항목 값 세트를 참조하는 특정 형식의 값 또는 값 세트입니다. 그런 다음 데이터 항목은 항목의 단순한 기본 형태로 알려지지 않은 항목 그룹인 하위 항목으로 분류됩니다.

직원 이름이 이름, 중간, 성의 세 가지 하위 항목으로 분류될 수 있는 예를 고려해 보겠습니다. 그러나 직원에게 부여된 ID는 일반적으로 단일 항목으로 간주됩니다.

데이터 구조 소개

그림 1: 데이터 항목의 표현

위에서 언급한 예에서는 ID, Age, Gender, First, Middle, Last, Street, Locality 등과 같은 항목이 기본 데이터 항목입니다. 반면 이름과 주소는 그룹 데이터 항목입니다.

데이터 구조란 무엇입니까?

데이터 구조 컴퓨터 과학의 한 분야입니다. 데이터 구조를 연구하면 프로세스나 프로그램의 효율성을 높이기 위해 데이터 구성과 데이터 흐름 관리를 이해할 수 있습니다. 데이터 구조는 컴퓨터 메모리에 데이터를 저장하고 구성하여 나중에 필요할 때 이러한 데이터를 쉽게 검색하고 효율적으로 활용할 수 있도록 하는 특별한 방법입니다. 데이터는 특정 데이터 구성에 대한 논리적 또는 수학적 모델을 데이터 구조라고 하는 것처럼 다양한 방식으로 관리할 수 있습니다.

특정 데이터 모델의 범위는 다음 두 가지 요소에 따라 달라집니다.

  1. 첫째, 데이터와 실제 객체의 명확한 상관관계를 반영할 수 있을 만큼 구조에 충분히 로드되어야 합니다.
  2. 둘째, 필요할 때마다 효율적으로 데이터를 처리할 수 있도록 구성이 매우 간단해야 합니다.

데이터 구조의 예로는 배열, 연결된 목록, 스택, 큐, 트리 등이 있습니다. 데이터 구조는 컴퓨터 과학의 거의 모든 측면(예: 컴파일러 디자인, 운영 체제, 그래픽, 인공 지능 등)에서 널리 사용됩니다.

데이터 구조는 프로그래머가 데이터를 효과적인 방식으로 관리할 수 있도록 해주는 많은 컴퓨터 과학 알고리즘의 주요 부분입니다. 소프트웨어의 주요 목적은 사용자의 데이터를 최대한 빨리 저장하고 검색하는 것이므로 프로그램이나 소프트웨어의 성능을 향상시키는 데 중요한 역할을 합니다.

ymail이 뭐야?

데이터 구조와 관련된 기본 용어

데이터 구조는 모든 소프트웨어나 프로그램의 구성 요소입니다. 프로그램에 적합한 데이터 구조를 선택하는 것은 프로그래머에게 매우 어려운 작업입니다.

다음은 데이터 구조가 포함될 때마다 사용되는 몇 가지 기본 용어입니다.

    데이터:데이터를 기본 값 또는 값 모음으로 정의할 수 있습니다. 예를 들어 직원의 이름과 ID는 해당 직원과 관련된 데이터입니다.데이터 항목:단일 가치 단위를 데이터 항목이라고 합니다.그룹 항목:하위 데이터 항목이 있는 데이터 항목을 그룹 항목이라고 합니다. 예를 들어 직원의 이름에는 이름, 중간 이름, 성이 있을 수 있습니다.기본 항목:하위 항목으로 나눌 수 없는 데이터 항목을 기본 항목이라고 합니다. 예를 들어 직원의 ID입니다.엔터티 및 속성:특정 개체의 클래스는 엔터티로 표시됩니다. 다양한 속성으로 구성됩니다. 각 속성은 해당 엔터티의 특정 속성을 상징합니다. 예를 들어,
속성 ID 이름 성별 직위
가치 1234 스테이시 M. 힐 여성 소프트웨어 개발자

유사한 속성을 가진 엔터티는 엔터티 세트 . 엔터티 집합의 각 속성에는 특정 속성에 할당될 수 있는 모든 가능한 값의 집합인 값의 범위가 있습니다.

'정보'라는 용어는 의미 있는 데이터 또는 처리된 데이터의 특정 속성을 가진 데이터에 사용되는 경우가 있습니다.

    필드:엔터티의 속성을 상징하는 정보의 단일 기본 단위를 필드라고 합니다.기록:다양한 데이터 항목의 모음을 레코드라고 합니다. 예를 들어 직원 엔터티에 대해 이야기하는 경우 해당 엔터티의 이름, ID, 주소 및 직위를 그룹화하여 직원에 대한 레코드를 형성할 수 있습니다.파일:한 엔터티 유형의 다양한 레코드 모음을 파일이라고 합니다. 예를 들어 직원이 100명인 경우 각 직원에 대한 데이터가 포함된 관련 파일에는 25개의 레코드가 있습니다.

데이터 구조의 필요성 이해

애플리케이션이 더욱 복잡해지고 데이터 양이 매일 증가함에 따라 데이터 검색, 처리 속도, 다중 요청 처리 등에 문제가 발생할 수 있습니다. 데이터 구조는 데이터를 효율적으로 구성, 관리 및 저장하는 다양한 방법을 지원합니다. 데이터 구조의 도움으로 데이터 항목을 쉽게 탐색할 수 있습니다. 데이터 구조는 효율성, 재사용성 및 추상화를 제공합니다.

왜 데이터 구조를 배워야 할까요?

  1. 데이터 구조와 알고리즘은 컴퓨터 과학의 두 가지 주요 측면입니다.
  2. 데이터 구조를 사용하면 데이터를 구성하고 저장할 수 있는 반면, 알고리즘을 사용하면 해당 데이터를 의미 있게 처리할 수 있습니다.
  3. 데이터 구조와 알고리즘을 배우는 것은 우리가 더 나은 프로그래머가 되는 데 도움이 될 것입니다.
  4. 우리는 더욱 효과적이고 신뢰할 수 있는 코드를 작성할 수 있게 될 것입니다.
  5. 또한 문제를 보다 빠르고 효율적으로 해결할 수 있을 것입니다.

데이터 구조의 목적 이해

데이터 구조는 두 가지 보완적인 목표를 충족합니다.

    단정:데이터 구조는 관심 영역을 기반으로 모든 종류의 입력에 대해 올바르게 작동하도록 설계되었습니다. 즉, 정확성은 데이터 구조의 주요 목표를 형성하며, 이는 항상 데이터 구조가 해결하려는 문제에 따라 달라집니다.능률:데이터 구조도 효율적이어야 합니다. 메모리 공간과 같은 많은 컴퓨터 자원을 활용하지 않고 데이터를 빠르게 처리해야 합니다. 실시간 상태에서는 데이터 구조의 효율성이 프로세스의 성공과 실패를 결정하는 핵심 요소입니다.

데이터 구조의 몇 가지 주요 기능 이해

데이터 구조의 중요한 특징 중 일부는 다음과 같습니다.

    견고성:일반적으로 모든 컴퓨터 프로그래머는 모든 하드웨어 플랫폼에서 효율적인 실행과 함께 가능한 모든 입력에 대해 올바른 출력을 생성하는 소프트웨어를 생산하는 것을 목표로 합니다. 이러한 유형의 강력한 소프트웨어는 유효한 입력과 유효하지 않은 입력을 모두 관리해야 합니다.적응성:웹 브라우저, 워드 프로세서, 인터넷 검색 엔진과 같은 소프트웨어 애플리케이션 구축에는 수년 동안 정확하고 효율적인 작업 또는 실행이 필요한 거대한 소프트웨어 시스템이 포함됩니다. 더욱이 소프트웨어는 새로운 기술이나 끊임없이 변화하는 시장 상황으로 인해 발전합니다.재사용 성:재사용성과 적응성과 같은 기능은 서로 밀접하게 연관되어 있습니다. 프로그래머가 소프트웨어를 구축하려면 많은 리소스가 필요하므로 비용이 많이 드는 기업이 되는 것으로 알려져 있습니다. 그러나 소프트웨어가 재사용 가능하고 적응 가능한 방식으로 개발되면 향후 대부분의 응용 프로그램에 적용될 수 있습니다. 따라서 고품질 데이터 구조를 실행함으로써 비용 효율적이고 시간을 절약해 주는 재사용 가능한 소프트웨어를 구축하는 것이 가능합니다.

데이터 구조의 분류

데이터 구조는 다양한 방식으로 서로 관련된 구조화된 변수 세트를 제공합니다. 이는 데이터 요소 간의 관계를 나타내고 프로그래머가 데이터를 효율적으로 처리할 수 있도록 하는 프로그래밍 도구의 기초를 형성합니다.

데이터 구조를 두 가지 범주로 분류할 수 있습니다.

  1. 원시 데이터 구조
  2. 비기본 데이터 구조

다음 그림은 데이터 구조의 다양한 분류를 보여줍니다.

데이터 구조 소개

그림 2: 데이터 구조의 분류

원시 데이터 구조

    원시 데이터 구조숫자와 문자로 구성된 데이터 구조입니다. 내장 프로그램에.
  1. 이러한 데이터 구조는 기계 수준 명령어로 직접 조작하거나 작동할 수 있습니다.
  2. 다음과 같은 기본 데이터 유형 정수, 부동 소수점, 문자 , 그리고 부울 기본 데이터 구조에 속합니다.
  3. 이러한 데이터 유형이라고도 합니다. 단순 데이터 유형 , 더 이상 나눌 수 없는 문자가 포함되어 있기 때문입니다.

비원시적 데이터 구조

    비원시적 데이터 구조원시 데이터 구조에서 파생된 데이터 구조입니다.
  1. 이러한 데이터 구조는 기계 수준 명령어로 직접 조작하거나 작동할 수 없습니다.
  2. 이러한 데이터 구조의 초점은 다음 중 하나인 데이터 요소 집합을 형성하는 것입니다. 동종의 (동일한 데이터 유형) 또는 이질적인 (다른 데이터 유형).
  3. 데이터의 구조와 배열에 따라 이러한 데이터 구조를 두 가지 하위 범주로 나눌 수 있습니다.
    1. 선형 데이터 구조
    2. 비선형 데이터 구조

선형 데이터 구조

데이터 요소 간의 선형 연결을 유지하는 데이터 구조를 선형 데이터 구조라고 합니다. 데이터 배열은 선형적으로 이루어지며 각 요소는 첫 번째와 마지막 데이터 요소를 제외한 후속 요소와 선행 요소로 구성됩니다. 그러나 메모리의 경우 배열이 순차적이지 않을 수 있으므로 반드시 그런 것은 아닙니다.

메모리 할당에 따라 선형 데이터 구조는 두 가지 유형으로 더 분류됩니다.

    정적 데이터 구조:고정된 크기를 갖는 데이터 구조를 정적 데이터 구조라고 합니다. 이러한 데이터 구조의 메모리는 컴파일러 타임에 할당되며 컴파일 후에는 사용자가 크기를 변경할 수 없습니다. 그러나 여기에 저장된 데이터는 변경될 수 있습니다.
    그만큼 정렬 고정된 크기를 가지며 해당 데이터는 나중에 수정될 수 있으므로 정적 데이터 구조의 가장 좋은 예입니다.동적 데이터 구조:동적 크기를 갖는 데이터 구조를 동적 데이터 구조라고 합니다. 이러한 데이터 구조의 메모리는 런타임에 할당되며 크기는 코드 런타임 동안 달라집니다. 또한 사용자는 코드 실행 시 이러한 데이터 구조에 저장된 데이터 요소뿐만 아니라 크기도 변경할 수 있습니다.
    연결리스트, 스택 , 그리고 꼬리 동적 데이터 구조의 일반적인 예입니다.

선형 데이터 구조의 유형

우리가 일반적으로 사용하는 선형자료구조의 목록은 다음과 같습니다.

1. 배열

정렬 동일한 데이터 유형의 여러 데이터 요소를 하나의 변수로 수집하는 데 사용되는 데이터 구조입니다. 동일한 데이터 유형의 여러 값을 별도의 변수 이름에 저장하는 대신 모든 값을 하나의 변수에 함께 저장할 수 있습니다. 이 진술은 모든 프로그램에서 동일한 데이터 유형의 모든 값을 해당 데이터 유형의 하나의 배열로 통합해야 함을 의미하지는 않습니다. 그러나 동일한 데이터 유형의 일부 특정 변수가 모두 배열에 적합한 방식으로 서로 관련되는 경우가 종종 있습니다.

호환성 테스트

배열은 각 요소가 목록에서 고유한 위치를 갖는 요소 목록입니다. 배열의 데이터 요소는 동일한 변수 이름을 공유합니다. 그러나 각각은 아래 첨자라고 하는 서로 다른 색인 번호를 갖습니다. 목록의 위치를 ​​사용하여 목록의 모든 데이터 요소에 액세스할 수 있습니다. 따라서 이해해야 할 배열의 주요 특징은 데이터가 인접한 메모리 위치에 저장되어 사용자가 해당 인덱스를 사용하여 배열의 데이터 요소를 탐색할 수 있다는 것입니다.

데이터 구조 소개

그림 3. 배열

배열은 다양한 유형으로 분류될 수 있습니다.

    1차원 배열:데이터 요소 행이 하나만 있는 배열을 1차원 배열이라고 합니다. 오름차순 저장 위치에 저장됩니다.2차원 배열:여러 행과 열의 데이터 요소로 구성된 배열을 2차원 배열이라고 합니다. 매트릭스라고도 합니다.다차원 배열:다차원 배열을 배열의 배열로 정의할 수 있습니다. 다차원 배열은 필요에 따라 많은 인덱스를 포함할 수 있으므로 두 개의 인덱스 또는 두 개의 차원으로 제한되지 않습니다.

어레이의 일부 응용 분야:

  1. 동일한 데이터 유형에 속하는 데이터 요소 목록을 저장할 수 있습니다.
  2. 배열은 다른 데이터 구조의 보조 저장소 역할을 합니다.
  3. 배열은 또한 고정 개수의 이진 트리의 데이터 요소를 저장하는 데 도움이 됩니다.
  4. 배열은 행렬을 저장하는 역할도 합니다.

2. 연결리스트

연결리스트 데이터 요소 모음을 동적으로 저장하는 데 사용되는 선형 데이터 구조의 또 다른 예입니다. 이 데이터 구조의 데이터 요소는 링크나 포인터를 사용하여 연결된 노드로 표시됩니다. 각 노드에는 두 개의 필드가 포함되어 있으며 정보 필드는 실제 데이터로 구성되고 포인터 필드는 목록에 있는 후속 노드의 주소로 구성됩니다. 연결된 목록의 마지막 노드에 대한 포인터는 아무것도 가리키지 않으므로 널 포인터로 구성됩니다. 배열과 달리 사용자는 요구 사항에 따라 연결 목록의 크기를 동적으로 조정할 수 있습니다.

데이터 구조 소개

그림 4. 연결리스트

연결 목록은 여러 유형으로 분류될 수 있습니다.

    단일 연결 목록:단일 연결 목록(Singly Linked List)은 연결 목록의 가장 일반적인 유형입니다. 각 노드에는 데이터와 다음 노드에 대한 주소가 포함된 포인터 필드가 있습니다.이중 연결 목록:이중 연결 목록은 정보 필드와 두 개의 포인터 필드로 구성됩니다. 정보 필드에는 데이터가 포함됩니다. 첫 번째 포인터 필드에는 이전 노드의 주소가 포함되고, 다른 포인터 필드에는 다음 노드에 대한 참조가 포함됩니다. 따라서 우리는 양방향(뒤로 또는 앞으로)으로 갈 수 있습니다.순환 연결 목록:순환 연결 목록은 단일 연결 목록과 유사합니다. 유일한 주요 차이점은 마지막 노드에 첫 번째 노드의 주소가 포함되어 순환 연결 목록에서 순환 루프를 형성한다는 것입니다.

연결 목록의 일부 응용 프로그램:

  1. 연결된 목록은 미리 정의된 크기의 스택, 큐, 이진 트리 및 그래프를 구현하는 데 도움이 됩니다.
  2. 동적 메모리 관리를 위해 운영 체제의 기능을 구현할 수도 있습니다.
  3. 연결된 목록을 사용하면 수학 연산에 대한 다항식 구현도 가능합니다.
  4. 순환 연결 목록을 사용하여 작업을 라운드 로빈으로 실행하는 운영 체제나 응용 프로그램 기능을 구현할 수 있습니다.
  5. 순환 연결 목록은 마지막 슬라이드가 표시된 후 사용자가 첫 번째 슬라이드로 돌아가야 하는 슬라이드 쇼에도 유용합니다.
  6. 이중 연결 목록은 웹 사이트의 열린 페이지에서 앞뒤로 이동하기 위해 브라우저에서 앞으로 및 뒤로 버튼을 구현하는 데 사용됩니다.

3. 스택

스택 다음을 따르는 선형 데이터 구조입니다. LIFO Stack의 한쪽 끝(Top)에서 삽입, 삭제 등의 작업을 수행할 수 있는 Last In, First Out(Last In, First Out) 원리입니다. 스택은 연속 메모리인 배열과 비연속 메모리인 연결 목록을 사용하여 구현할 수 있습니다. 스택의 실제 예로는 책 더미, 카드 더미, 돈 더미 등이 있습니다.

데이터 구조 소개

그림 5. 스택의 실제 예

위 그림은 스택 상단에서 새 책을 삽입하고 제거하는 것과 같이 작업이 한쪽 끝에서만 수행되는 스택의 실제 예를 나타냅니다. 이는 스택의 삽입 및 삭제가 스택의 최상위에서만 수행될 수 있음을 의미합니다. 우리는 주어진 시간에 스택의 상단에만 접근할 수 있습니다.

dbms의 데이터베이스 디자인

스택의 주요 작업은 다음과 같습니다.

    푸시:스택에 새 요소를 삽입하는 작업을 푸시 작업이라고 합니다.팝:스택에서 요소를 제거하거나 삭제하는 작업을 팝 작업이라고 합니다.
데이터 구조 소개

그림 6. 스택

스택의 일부 응용 분야:

  1. 스택은 재귀 작업을 위한 임시 저장 구조로 사용됩니다.
  2. 스택은 함수 호출, 중첩 작업, 지연/연기된 함수를 위한 보조 저장 구조로도 활용됩니다.
  3. 스택을 사용하여 함수 호출을 관리할 수 있습니다.
  4. 스택은 다양한 프로그래밍 언어의 산술 표현식을 평가하는 데에도 사용됩니다.
  5. 스택은 중위 표현식을 후위 표현식으로 변환하는 데에도 유용합니다.
  6. 스택을 사용하면 프로그래밍 환경에서 표현식의 구문을 확인할 수 있습니다.
  7. 스택을 사용하여 괄호를 일치시킬 수 있습니다.
  8. 스택을 사용하여 문자열을 뒤집을 수 있습니다.
  9. 스택은 역추적을 기반으로 문제를 해결하는 데 도움이 됩니다.
  10. 그래프 및 트리 순회에서 깊이 우선 검색에 스택을 사용할 수 있습니다.
  11. 스택은 운영 체제 기능에도 사용됩니다.
  12. 스택은 편집 시 UNDO 및 REDO 기능에도 사용됩니다.

4. 꼬리

대기줄 요소 삽입 및 삭제에 대한 일부 제한이 있는 스택과 유사한 선형 데이터 구조입니다. 대기열의 요소 삽입은 한쪽 끝에서 수행되고 제거는 다른 끝 또는 반대쪽 끝에서 수행됩니다. 따라서 큐 데이터 구조는 데이터 요소를 조작하기 위해 FIFO(선입선출) 원칙을 따른다는 결론을 내릴 수 있습니다. 대기열 구현은 배열, 연결 목록 또는 스택을 사용하여 수행할 수 있습니다. 대기열의 실제 예로는 매표소의 줄, 에스컬레이터, 세차장 등이 있습니다.

데이터 구조 소개

그림 7. 대기열의 실제 예

위 이미지는 항상 먼저 온 고객이 먼저 서빙되는 Queue를 이해하는 데 도움이 되는 영화 매표소의 실제 일러스트입니다. 마지막에 도착하는 고객은 의심할 여지없이 가장 마지막에 서비스를 받을 것입니다. 대기열의 양쪽 끝은 열려 있으며 서로 다른 작업을 실행할 수 있습니다. 또 다른 예는 고객이 요청한 서비스를 제공한 후 앞쪽 끝에서 제거되고 뒤쪽 끝에서 고객이 삽입되는 푸드 코트 라인입니다.

다음은 대기열의 주요 작업입니다.

    대기열에 추가:대기열에 일부 데이터 요소를 삽입하거나 추가하는 것을 대기열에 넣기라고 합니다. 요소 삽입은 항상 후면 포인터를 사용하여 수행됩니다.대기열에서 제거:대기열에서 데이터 요소를 삭제하거나 제거하는 것을 대기열 제거라고 합니다. 요소 삭제는 항상 전면 포인터를 사용하여 수행됩니다.
데이터 구조 소개

그림 8. 대기줄

대기열의 일부 응용 프로그램:

  1. 대기열은 일반적으로 그래프의 범위 검색 작업에 사용됩니다.
  2. 큐는 사용자가 누른 키를 저장하는 키보드 버퍼 큐와 프린터에서 인쇄된 문서를 저장하는 인쇄 버퍼 큐와 같이 운영 체제의 작업 스케줄러 작업에도 사용됩니다.
  3. 대기열은 CPU 예약, 작업 예약 및 디스크 예약을 담당합니다.
  4. 우선순위 대기열은 브라우저에서 파일을 다운로드하는 작업에 활용됩니다.
  5. 큐는 주변 장치와 CPU 간에 데이터를 전송하는 데에도 사용됩니다.
  6. 큐는 또한 CPU에 대한 사용자 애플리케이션에 의해 생성된 인터럽트를 처리하는 역할도 합니다.

비선형 데이터 구조

비선형 데이터 구조는 데이터 요소가 순차적으로 배열되지 않은 데이터 구조입니다. 여기서는 데이터의 삽입과 제거가 선형 방식으로 가능하지 않습니다. 개별 데이터 항목 간에는 계층적 관계가 존재합니다.

비선형 데이터 구조의 유형

다음은 우리가 일반적으로 사용하는 비선형 데이터 구조 목록입니다.

JSON 파일

1. 나무

트리는 비선형 데이터 구조이며 트리의 각 노드가 값과 다른 노드('자식')에 대한 참조 목록을 저장하는 노드 컬렉션을 포함하는 계층 구조입니다.

트리(Tree) 데이터 구조는 데이터를 컴퓨터에 배열하고 수집하여 보다 효율적으로 활용하기 위한 특화된 방법입니다. 여기에는 중앙 노드, 구조 노드 및 가장자리를 통해 연결된 하위 노드가 포함됩니다. 트리 데이터 구조는 뿌리, 가지, 잎이 연결되어 구성되어 있다고 말할 수도 있습니다.

데이터 구조 소개

그림 9. 나무

나무는 여러 유형으로 분류될 수 있습니다.

    이진 트리:각 상위 노드가 최대 2개의 하위 노드를 가질 수 있는 트리 데이터 구조를 이진 트리라고 합니다.이진 검색 트리:이진 검색 트리는 정렬된 숫자 목록을 쉽게 유지할 수 있는 트리 데이터 구조입니다.AVL 트리:AVL 트리는 각 노드가 값이 -1, 0 또는 +1인 균형 요소로 알려진 추가 정보를 유지하는 자체 균형 이진 검색 트리입니다.B-트리:B-트리는 각 노드가 여러 키로 구성되고 2개 이상의 자식을 가질 수 있는 특별한 유형의 자체 균형 이진 검색 트리입니다.

나무의 일부 응용:

  1. 트리는 디렉토리 및 파일 시스템과 같은 컴퓨터 시스템에서 계층 구조를 구현합니다.
  2. 트리는 웹 사이트의 탐색 구조를 구현하는 데에도 사용됩니다.
  3. Trees를 사용하면 Huffman의 코드와 같은 코드를 생성할 수 있습니다.
  4. 트리는 게임 애플리케이션의 의사 결정에도 도움이 됩니다.
  5. 트리는 우선순위 기반 OS 스케줄링 기능을 위한 우선순위 큐 구현을 담당합니다.
  6. 트리는 또한 다양한 프로그래밍 언어의 컴파일러에서 표현식과 명령문을 구문 분석하는 역할을 담당합니다.
  7. 트리를 사용하여 데이터베이스 관리 시스템(DBMS)의 인덱싱을 위한 데이터 키를 저장할 수 있습니다.
  8. 스패닝 트리를 사용하면 컴퓨터 및 통신 네트워크에서 의사결정을 라우팅할 수 있습니다.
  9. 트리는 인공지능(AI), 로봇 공학, 비디오 게임 애플리케이션에서 구현되는 경로 찾기 알고리즘에도 사용됩니다.

2. 그래프

그래프는 유한한 수의 노드 또는 정점과 이를 연결하는 가장자리로 구성된 비선형 데이터 구조의 또 다른 예입니다. 그래프는 문제 영역을 소셜 네트워크, 회선 네트워크, 전화 네트워크와 같은 네트워크로 표시하여 현실 세계의 문제를 해결하는 데 활용됩니다. 예를 들어, 그래프의 노드나 정점은 전화 네트워크의 단일 사용자를 나타낼 수 있고 가장자리는 전화를 통한 사용자 간의 링크를 나타낼 수 있습니다.

그래프 데이터 구조 G는 아래와 같이 정점 세트 V와 모서리 세트 E로 구성된 수학적 구조로 간주됩니다.

G = (V,E)

데이터 구조 소개

그림 10. 그래프

위 그림은 7개의 정점 A, B, C, D, E, F, G와 10개의 모서리 [A, B], [A, C], [B, C], [B, D]를 갖는 그래프를 나타냅니다. [B, E], [C, D], [D, E], [D, F], [E, F] 및 [E, G].

자바 int를 char로

정점과 가장자리의 위치에 따라 그래프는 여러 유형으로 분류될 수 있습니다.

    널 그래프:빈 간선 집합이 있는 그래프를 Null 그래프라고 합니다.간단한 그래프:정점이 하나만 있는 그래프를 단순 그래프(Trivial Graph)라고 합니다.단순 그래프:자체 루프나 다중 간선이 없는 그래프를 단순 그래프라고 합니다.멀티 그래프:그래프가 여러 개의 가장자리로 구성되어 있지만 자체 루프가 없는 경우 다중 그래프라고 합니다.의사 그래프:자체 루프와 여러 개의 간선이 있는 그래프를 의사 그래프라고 합니다.무방향성 그래프:방향이 없는 간선으로 구성된 그래프를 방향이 없는 그래프라고 합니다.방향성 그래프:정점 사이의 방향성 가장자리로 구성된 그래프를 방향성 그래프라고 합니다.연결된 그래프:모든 정점 쌍 사이에 최소한 단일 경로가 있는 그래프를 연결된 그래프라고 합니다.연결이 끊긴 그래프:적어도 한 쌍의 정점 사이에 경로가 존재하지 않는 그래프를 연결이 끊긴 그래프라고 합니다.일반 그래프:모든 정점의 차수가 동일한 그래프를 정규 그래프라고 합니다.완전한 그래프:모든 정점이 모든 정점 쌍 사이에 가장자리를 갖는 그래프를 완전 그래프라고 합니다.사이클 그래프:그래프에 순환을 형성하는 꼭지점과 가장자리가 3개 이상 있으면 그래프를 순환이라고 합니다.순환 그래프:그래프는 최소한 하나의 사이클이 존재하는 경우에만 순환 그래프라고 합니다.비순환 그래프:주기가 0인 그래프를 비순환 그래프라고 합니다.유한 그래프:유한한 개수의 꼭지점과 모서리를 가진 그래프를 유한 그래프라고 합니다.무한 그래프:무한한 수의 꼭지점과 가장자리를 가진 그래프를 무한 그래프라고 합니다.이분 그래프:정점이 독립적인 집합 A와 B로 분할될 수 있고 집합 A의 모든 정점이 일부 가장자리가 있는 집합 B에 있는 정점에만 연결되어야 하는 그래프를 이분 그래프라고 합니다.평면 그래프:두 개의 모서리가 서로 교차하는 단일 평면에 그래프를 그릴 수 있으면 그래프를 평면이라고 합니다.오일러 그래프:그래프는 모든 꼭짓점이 짝수인 경우에만 오일러라고 합니다.해밀턴 그래프:해밀턴 회로로 구성된 연결된 그래프를 해밀턴 그래프라고 합니다.

그래프의 일부 응용:

  1. 그래프는 교통, 여행, 통신 애플리케이션에서 경로와 네트워크를 나타내는 데 도움이 됩니다.
  2. 그래프는 GPS에서 경로를 표시하는 데 사용됩니다.
  3. 그래프는 또한 소셜 네트워크 및 기타 네트워크 기반 애플리케이션의 상호 연결을 나타내는 데 도움이 됩니다.
  4. 그래프는 매핑 애플리케이션에 활용됩니다.
  5. 그래프는 전자상거래 애플리케이션에서 사용자 선호도를 나타내는 역할을 합니다.
  6. 그래프는 지역 또는 지방 기업에 제기된 문제를 식별하기 위해 유틸리티 네트워크에서도 사용됩니다.
  7. 그래프는 조직 내 리소스의 활용도와 가용성을 관리하는 데도 도움이 됩니다.
  8. 그래프는 하이퍼링크를 통해 페이지 간의 연결을 표시하기 위해 웹 사이트의 문서 링크 맵을 만드는 데에도 사용됩니다.
  9. 그래프는 로봇 동작과 신경망에도 사용됩니다.

데이터 구조의 기본 작업

다음 섹션에서는 모든 데이터 구조에서 데이터를 조작하기 위해 수행할 수 있는 다양한 유형의 작업에 대해 설명합니다.

    순회:데이터 구조를 탐색한다는 것은 각 데이터 요소를 관리할 수 있도록 정확히 한 번만 액세스하는 것을 의미합니다. 예를 들어, 부서의 모든 직원 이름을 인쇄하는 동안 순회가 필요합니다.찾다:검색은 특정 제약 조건을 충족하는 하나 이상의 데이터 요소의 위치를 ​​찾는 것을 의미하는 또 다른 데이터 구조 작업입니다. 이러한 데이터 요소는 주어진 데이터 요소 세트에 존재할 수도 있고 존재하지 않을 수도 있습니다. 예를 들어, 검색을 통해 5년 이상의 경력을 가진 모든 직원의 이름을 찾을 수 있습니다.삽입:삽입은 컬렉션에 새로운 데이터 요소를 삽입하거나 추가하는 것을 의미합니다. 예를 들어 삽입 작업을 사용하여 회사에서 최근 고용한 신입 직원의 세부 정보를 추가할 수 있습니다.삭제:삭제란 주어진 데이터 요소 목록에서 특정 데이터 요소를 제거하거나 삭제하는 것을 의미합니다. 예를 들어 삭제 작업을 사용하여 퇴사한 직원의 이름을 삭제할 수 있습니다.정렬:정렬이란 애플리케이션 유형에 따라 데이터 요소를 오름차순 또는 내림차순으로 정렬하는 것을 의미합니다. 예를 들어, 정렬 작업을 사용하여 부서 내 직원의 이름을 알파벳순으로 정렬하거나 직원의 성과를 내림차순으로 정렬하고 상위 3명의 세부 정보를 추출하여 해당 월의 상위 3명의 성과자를 추정할 수 있습니다.병합:병합이란 정렬된 데이터 요소의 단일 목록을 형성하기 위해 두 개의 정렬된 목록의 데이터 요소를 결합하는 것을 의미합니다.만들다:생성은 프로그램의 데이터 요소에 대한 메모리를 예약하는 데 사용되는 작업입니다. 선언문을 사용하여 이 작업을 수행할 수 있습니다. 데이터 구조 생성은 다음 중 하나에서 발생할 수 있습니다.
    1. 컴파일 타임
    2. 실행 시간
      예를 들어, malloc() 함수는 C 언어에서 데이터 구조를 만드는 데 사용됩니다.
    선택:선택은 사용 가능한 데이터 중에서 특정 데이터를 선택하는 것을 의미합니다. 루프 내부에 조건을 지정하여 특정 데이터를 선택할 수 있습니다.업데이트:업데이트 작업을 통해 데이터 구조의 데이터를 업데이트하거나 수정할 수 있습니다. 선택 작업과 같이 루프 내부에 일부 조건을 지정하여 특정 데이터를 업데이트할 수도 있습니다.파편:분할 작업을 통해 데이터를 다양한 하위 부분으로 분할하여 전체 프로세스 완료 시간을 줄일 수 있습니다.

추상 데이터 유형 이해

에 따라 국립표준기술연구소(NIST) 에서 데이터 구조는 더 나은 알고리즘 효율성을 위해 일반적으로 메모리에 정보를 배열하는 것입니다. 데이터 구조에는 연결된 목록, 스택, 큐, 트리 및 사전이 포함됩니다. 또한 사람의 이름이나 주소와 같은 이론적 실체일 수도 있습니다.

위에서 언급한 정의에서 데이터 구조의 작업에는 다음이 포함된다는 결론을 내릴 수 있습니다.

  1. 목록에서 항목을 추가하거나 삭제하는 것과 같은 높은 수준의 추상화입니다.
  2. 목록의 항목을 검색하고 정렬합니다.
  3. 목록에서 우선순위가 가장 높은 항목에 액세스합니다.

데이터 구조가 그러한 작업을 수행할 때마다 이를 데이터 구조라고 합니다. ADT(추상 데이터 유형) .

데이터에 대한 작업과 함께 데이터 요소 집합으로 정의할 수 있습니다. '추상'이라는 용어는 데이터와 여기에 정의된 기본 작업이 구현과 별개로 연구되고 있다는 사실을 의미합니다. 여기에는 데이터를 사용하여 무엇을 할 수 있는지가 포함되며, 데이터를 어떻게 수행할 수 있는지가 포함되지 않습니다.

ADI 구현에는 기본 작업을 위한 데이터 요소와 알고리즘을 저장하기 위한 저장 구조가 포함되어 있습니다. 배열, 연결리스트, 큐, 스택 등과 같은 모든 데이터 구조는 ADT의 예입니다.

ADT 사용의 이점 이해

현실 세계에서 프로그램은 새로운 제약이나 요구 사항의 결과로 발전하므로 프로그램을 수정하려면 일반적으로 하나 이상의 데이터 구조를 변경해야 합니다. 예를 들어, 각 직원에 대한 자세한 정보를 추적하기 위해 직원의 기록에 새 필드를 삽입한다고 가정해 보겠습니다. 이 경우 Array를 Linked 구조로 대체하여 프로그램의 효율성을 향상시킬 수 있습니다. 이러한 상황에서 수정된 구조를 활용하는 모든 프로시저를 다시 작성하는 것은 적합하지 않습니다. 따라서 더 나은 대안은 데이터 구조를 구현 정보에서 분리하는 것입니다. 이것이 ADT(추상 데이터 유형) 사용의 기본 원칙입니다.

데이터 구조의 일부 응용

다음은 데이터 구조의 일부 응용 프로그램입니다.

  1. 데이터 구조는 컴퓨터 메모리의 데이터를 구성하는 데 도움이 됩니다.
  2. 데이터 구조는 데이터베이스의 정보를 표현하는 데도 도움이 됩니다.
  3. 데이터 구조를 사용하면 데이터를 검색하는 알고리즘을 구현할 수 있습니다(예: 검색 엔진).
  4. 데이터 구조를 사용하여 데이터를 조작하는 알고리즘을 구현할 수 있습니다(예: 워드 프로세서).
  5. 데이터 구조(예: 데이터 마이너)를 사용하여 데이터를 분석하는 알고리즘을 구현할 수도 있습니다.
  6. 데이터 구조는 데이터를 생성하는 알고리즘을 지원합니다(예: 난수 생성기).
  7. 데이터 구조는 데이터를 압축하고 압축을 푸는 알고리즘도 지원합니다(예: zip 유틸리티).
  8. 또한 데이터 구조를 사용하여 데이터를 암호화하고 해독하는 알고리즘을 구현할 수도 있습니다(예: 보안 시스템).
  9. 데이터 구조의 도움으로 파일과 디렉터리를 관리할 수 있는 소프트웨어(예: 파일 관리자)를 구축할 수 있습니다.
  10. 또한 데이터 구조를 사용하여 그래픽을 렌더링할 수 있는 소프트웨어를 개발할 수도 있습니다. (예: 웹 브라우저 또는 3D 렌더링 소프트웨어)

그 외에도 앞서 언급한 것처럼 원하는 소프트웨어를 구축하는 데 도움이 될 수 있는 데이터 구조의 다른 응용 프로그램이 많이 있습니다.