이 데이터 구조(DS) 자습서에서는 데이터 구조의 기본 및 고급 개념을 제공합니다. 데이터 구조 자습서는 초보자와 전문가를 위해 설계되었습니다.
데이터 구조는 데이터를 효율적으로 사용할 수 있도록 저장하고 구성하는 방법을 말합니다.
데이터 구조 자습서에는 배열, 포인터, 구조, Linked List, 스택, 큐, 그래프, 검색, 정렬, 프로그램 등과 같은 데이터 구조의 모든 주제가 포함되어 있습니다.
데이터 구조란 무엇인가?
데이터 구조 이름은 메모리에 데이터를 구성하는 것을 말합니다.
데이터 구조 중 우리가 이미 알고 있는 언어 중 하나 인 C 언어의 배열처럼 메모리에 데이터를 구성하는 방법에는 여러 가지가 있습니다.
배열은 데이터가 순차적으로, 즉 하나씩 저장되는 메모리 요소의 모음입니다.
다시 말해서, 배열은 요소를 연속적으로 저장한다고 말할 수 있습니다.
이 데이터 구성은 데이터 구조의 배열을 이용해서 (구성) 가능한 것입니다.
메모리에 데이터를 구성하는 많은 다른 방법들이 있으며, 우리는 이 다양한 유형의 데이터 구조를 살펴보도록 하겠습니다.
데이터 구조는 C, C++, java 등과 같은 프로그래밍 언어가 아닙니다.
이 말은 메모리의 데이터를 구조화하기 위해 어떤 프로그래밍 언어에서도 사용할 수 있는 일련의 알고리즘입니다.
데이터를 메모리에 구조화하기 위해 'n'개의 알고리즘이 제안되었으며 이러한 모든 알고리즘은 추상 데이터 유형(Abstract data type)으로 알려져 있습니다. 이러한 추상 데이터 유형은 규칙 세트입니다.
데이터 구조의 유형
데이터 구조에는 두 가지 유형이 있습니다.
- 원시 데이터 구조
- 비원시 데이터 구조
원시 데이터 구조
원시 데이터 구조는 원시 데이터 유형을 말합니다. int, char, float, double 및 pointer는 단일 값을 가질 수 있는 원시 데이터 구조입니다.
비원시 데이터 구조
비원시 데이터 구조는 두 가지 유형으로 나뉩니다.
- 선형 데이터 구조
- 비선형 데이터 구조
선형 데이터 구조
데이터를 순차적으로 배열하는 것을 선형 데이터 구조라고 합니다.
이 목적으로 사용되는 데이터 구조는 배열, Linked list, 스택 및 큐가 있습니다.
이러한 데이터 구조에서 하나의 요소는 선형 형태로 다른 한 요소와만 연결됩니다.
하나의 요소가 'n'개의 요소에 연결될 때가 비선형 데이터 구조 인 것입니다.
가장 좋은 예는 트리와 그래프입니다. 이 경우 요소들은 무작위 방식으로 배열됩니다.
다음 절에서 위의 데이터 구조에 대해 간략하게 설명 할 것입니다.
이제 우리는 이러한 데이터 구조에서 우리가 할 수 있는 일반적인 작업들을 살펴보겠습니다.
데이터 구조를 다음과 같이 분류할 수도 있습니다.
- 정적 데이터 구조: 컴파일 시에 크기가 할당되는 데이터 구조의 한 유형입니다. 따라서 최대 크기가 고정되어 있습니다.
- 동적 데이터 구조: 런타임 시에 크기가 할당되는 데이터 구조의 한 유형입니다. 따라서 최대 크기는 유동적입니다.
주요 연산들
데이터 구조에서 수행할 수 있는 주요 또는 공통 연산들에는 다음과 같은 것들이 있습니다.
- 검색: 데이터 구조의 모든 요소를 검색할 수 있습니다.
- 정렬: 데이터 구조의 요소를 오름차순 또는 내림차순으로 정렬할 수 있습니다.
- 삽입: 데이터 구조에 새 요소를 삽입할 수도 있습니다.
- 업데이트: 요소를 업데이트할 수도 있습니다. 즉, 우리는 요소를 다른 요소로 바꿀 수 있습니다.
- 삭제: 삭제 작업을 수행하여 데이터 구조에서 해당 요소를 제거할 수도 있습니다.
어떤 데이터 구조?
데이터 구조는 데이터를 효율적으로 사용할 수 있도록 구성하는 방법입니다.
여기서 우리는 공간과 시간 모두에서 '효율적'이다라는 단어를 사용해왔습니다.
예를 들어 스택은 배열 또는 linked list 데이터 구조의 구현을사용하는 ADT(추상 데이터 유형)입니다.
따라서 특정 ADT를 구현하려면 어떤 데이터 구조가 필요하다는 결론을 내립니다.
ADT는 무엇을 수행 할 것인지를 알려주고 데이터 구조는 어떻게 수행 할 지 말해 줍니다.
달리 말하면, ADT는 청사진을 제공하고 데이터 구조는 구현 부분을 제공한다고 말할 수 있습니다.
그러면, 문득 떠오르는 질문이 있을 것입니다: 특정 ADT에 사용되는 데이터 구조를 어떻게 알 수 있습니까?
서로 다른 데이터 구조는 특정 ADT에서 구현될 수 있지만 이러한 구현들은 시간과 공간에 대해 비교됩니다.
예를 들어 스택 ADT는 배열과 linked list 으로 다 구현 가능 합니다.
배열이 시간 효율성을 제공하고 linked list이 공간 효율성을 제공한다고 가정하면 현재 사용자의 요구 사항에 가장 적합한 것을 선택해야 할 것입니다.
데이터 구조의 장점
데이터 구조의 장점은 다음과 같습니다.
- 효율성: 특정 ADT를 구현하기 위한 데이터 구조의 선택이 적절하면 프로그램을 시간과 공간적으로 매우 효율적으로 만듭니다.
- 재사용성: 데이터 구조는 재사용성을 제공하므로 여러 클라이언트 프로그램에서 데이터 구조를 사용할 수 있습니다.
- 추상화: ADT에 의해 지정된 데이터 구조는 추상화 수준도 제공합니다.
클라이언트는 데이터 구조의 내부 작업을 볼 수 없으므로 구현 부분에 대해 걱정할 필요가 없습니다. 클라이언트는 인터페이스만 볼 수 있습니다.
'프로그래밍' 카테고리의 다른 글
DS Algorithm (1) | 2022.12.01 |
---|---|
데이터 구조-소개 (0) | 2022.11.30 |
Python에서 문자열을 비교하는 방법: 동일성과 동등성 (0) | 2022.11.28 |
Where, Group by, Holding 및 Order by 절 (0) | 2022.11.27 |
자바에서 Bit Masking (1) | 2022.11.26 |