안녕하세요 성조입니다.
이번 포스팅은 알고리즘을 배우기 위해서 가장 중요한 도구가 되는 자료구조라 생각됩니다.
알고리즘이 영어 문법이라면 자료 구조는 영어 문단을 작성하기 위한 알파벳 정도로봐주시면 좋을 것 같습니다.
INDEX
ㆍ 자료구조(Data Structure)란?
ㆍ 구조의 종류
ㆍ 자료형(data type)이란?
ㆍ 추상 자료형(ADT : abstract data type)이란?
자료구조(Data Structure)란?
자료구조란?
데이터(Input)를 정보(Output)로 만들 때 사용되는 알고리즘을 효율적으로 만들기 위하여 자료의 접근, 수정, 조작, 관리, 저장등을 의미합니다.
사전적 의미와 주관적 의견으로 다시 풀어보자면 다음과 같습니다.
자료의 사전적 의미는 "학습, 연구, 판단 등의 기초가 되는 재료"입니다.
구조의 사전적 의미는 "집합과 거기서 정해진 연산이나 집합과 정해진 관계 등 집합과 그것을 가지고 있는 집합론적 대상으로 얽혀진 것"입니다.
쉽게 말하면 같은 타입의 집합을 어떤 방식으로 연산할 것인지 관계를 정하고 정의하는 것입니다.
최종적으로 자료 + 구조를 합쳐서
"데이터(재료)를 알고리즘의 효율성을 높이기 위해서 어떤 방식으로 문제를 해결할 것인지 관계를 정의하고 저장하는 형식을 정의한 것이다."라고 정의할 수 있습니다.
구조의 종류
대표적으로 가장 먼저 접하는 구조가 작성됐습니다.
선형 구조 | 비선형 구조 |
스택(Stack) | 트리(Tree) |
큐(Queue) | |
데크(Deque) | |
배열(Array) | 그래프(Graph) |
연결 리스트(Linked List) |
자료형(data type)이란?
자료형(Data type) | ||
기초 자료형 | 파생 자료형 | 사용자 정의 자료형 |
문자(char) 타입 | 배열 | 구조체 |
정수(int) 타입 | ||
실수(float) 타입 | 포인터 | 공용체 |
실수(double) 타입 | 열거형 | |
불리언(boolean) 타입 |
프로그래밍의 기본적인 자료들의 형태입니다.
자료형 중 많이 사용되는 String의 경우 C언어는 배열로 선언해서 사용하면 자동으로 문자열을 넣을 수 있습니다.
java의 경우 java.lang.String 메소드를 활용하면 문자열을 입력할 수 있습니다.
각 타입에 맞게 살짝의 설명을 덧 붙였습니다.
기초 자료형
문자 타입 : 'a', 'b', 'c' 같이 단일 문자 하나씩을 의미한다.
정수 타입 : 0, 1, 2, 3, 4와 같이 소수점 자리를 표현하지 않고 순수 정수로만 이뤄진 값들을 의미한다.
실수 타입 (float과 double 둘은 표현 가능 범위의 차이이다.): 0.1, 1.2, 2.3, 3.4, 4.5와 같이 소수점이 추가되는 경우를 의미한다.
불리언 타입 : true(정답)와 false(거짓)로 이뤄진 값이다.
파생 자료형
배열 : 같은 타입의 자료가 여러 개가 모인 것이다.
포인터 : 변수의 메모리 공간 주소를 가리키는 변수를 의미한다.
사용자 정의 자료형
구조체 : 다른 타입의 자료가 여러 개 모인 것이다.
공용체 : 구조체와 모든 것이 동일하지만 가장 큰 데이터의 타입에 맞춰 메모리가 초기화된다. 이런 특성으로 인하여 다양한 타입을 섞어서 쓰는 구조체와 다르게 공용체는 하나의 타입만 사용할 수 있게 된다.
열거형 : 멤버를 사용하고자 하는 차례나 순서에 맞게 나열하여 사용하는 방법이다.
추상 자료형(ADT : abstract data type)이란?
추상 자료형(ADT)이란?
자료 구조는 위에 언급한 것과 동일하게 효율성을 높이기 위해서 어떤 방식으로 문제를 해결할 것인지 저장 공간을 정의하는 것이라면 추상 자료형은 구현 방법을 명시하지 않고 있다는 차이점이 존재합니다.
자료 구조가 연산 방법, 시간 복잡도 등을 명시하지만 추상 자료형은 명시되지 않는 점도 있습니다.
추상화는 흔히 Java 언어에서 사용되는 인터페이스나 추상화와 같이 계층을 따로 둔 것입니다. 이런 추상 자료형을 구현하여 제대로 사용하기 위해서는 구현부를 따로 정의하여 사용하게 됩니다.
추상적 자료 구조의 종류
스택 : 대표적인 FILO의 구조를 가지고 있으며, 처음 들어온 값이 마지막에 나가고 마지막에 들어온 값이 처음으로 나오는 구조이다.
큐 : 대표적인 FIFO의 구조를 가지고 있으며, 처음 들어온 값이 처음으로 나가는 구조이다.
연결 리스트 : 하나의 노드가 데이터와 포인터를 가지고 앞뒤로 다른 노드와 연결되어 한 줄을 이뤄 데이터를 저장하는 자료 구조이다.
사전 : 키(Key)와 값(Value)이 하나의 쌍으로 묶이는 대표적인 열거형 구조이다.
쉽게 접할 수 있는 추상 자료형에는 복소수, 리스트, 스택, 큐, 맵, 우선순위 큐, 집합 등이 추가로 존재한다.
잘못된 학습의 내용이나 기타 모든 문의가 있는 경우 댓글 부탁드리겠습니다!
다음 포스팅 때 뵙겠습니다.
감사합니다.
- 참조 -
https://ko.wikipedia.org/wiki/%EC%9E%90%EB%A3%8C_%EA%B5%AC%EC%A1%B0
https://ko.wikipedia.org/wiki/%EC%B6%94%EC%83%81_%EC%9E%90%EB%A3%8C%ED%98%95
https://ko.wikipedia.org/wiki/%EC%9E%90%EB%A3%8C%ED%98%95
https://www.korean.go.kr/front/onlineQna/onlineQnaView.do?mn_id=216&qna_seq=127877
'Algorithm 👨💻 > Data Structure' 카테고리의 다른 글
[Data Structures] 큐(Queue) (with. a little deep dive and Java) (0) | 2022.04.17 |
---|