앞서 연결리스트를 구현하긴 했지만, 자료구조가 뭔지 정리하지도 않고 일단 구현한거 같아 매우 찜찜했다. 그래서 이번에는 다른 자료구조를 공부하고, 구현하기에 앞서 자료구조가 뭔지부터 공부하고 넘어가보자 한다. 이 글은 여러 블로그와 설명을 보며 공부한 것을 정리한 노트이다.
자료구조란?
자료구조(data structure)의 사전적 정의는 컴퓨터 과학에서 데이터의 효율적인 접근 및 수정을 가능케 하는 자료의 집합을 의미한다. 더 자세히 말하자면, 데이터 간의 논리적으로 정의된 규칙에 의해 구조화되어있으며, 자료에 대한 효율적인 처리를 수행하도록 조직적, 체계적으로 구분한 것을 의미한다.
왜 사용하는가?
사실 이 질문은 이미 자료구조의 정의에서 이미 나와있다. 데이터를 효율적으로 다루기 위해서이다. 예를 들어 특정한 상황에서 최적의 알고리즘을 사용하면 효율이 올라가듯이, 자료구조도 마찬가지로 최적의 자료구조를 택한다면, 더할 나위 없이 효율적으로 작동할 것이다.
결국 자료구조는 자료를 효율적으로 저장하고 관리하기 위해서 사용하며, 상황에 맞는 최적의 자료구조는 시간, 메모리적 측면에서 효율적인 수행을 보여준다.
그렇다면 어떤 자료구조가 효율적이라는 걸까? 상황에 맞는 최적의 자료구조를 선택하는데에는 다음과 같은 기준이 붙는다.
- 자료의 처리시간
- 자료의 크기
- 자료의 활용빈도
- 자료의 갱신정도 - 예) 삽입과 삭제가 자주 일어난다면 배열보다 연결리스트로 처리하는 것이 더 효율적이다.
- 프로그램의 용이성
자료구조의 특징
1. 효율성
당연히 자료구조가 자료의 효율적 처리를 위해 만들어졌다 보니 효율성은 당연지사.
2. 추상화
"추상화" 라는 단어부터 짚고 넘어가자. 추상화란, 컴퓨터과학에서 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다.
스택으로 예를 들어보자. pop()이라는 함수는 스택의 맨 마지막 요소를 지우는 것이다. 하지만, 이 과정은 구현하는 사람의 수 만큼 다른 알고리즘을 사용할 것이다. 결국, 자료구조는 내부적인 구현에 초점을 두는 것이 아닌, 어떻게, 얼마나 잘 사용할 것인지를 알아야 한다. 적재적소의 타이밍에 데이터를 추가하고, 제거하면서, 스택이라는 자료구조의 내부적 구현에 관심을 두는 것이 아닌, 스택을 사용해서 어떻게 외적인 프로그램(스택 내부가 아닌 스택을 사용하는 프로그램)의 구현에 관심을 둘 수 있는 것이다.
3. 재사용성
자료구조는, 특정 상황에서만 작동하도록 만들지 않는다. 즉, 특정 자료에 귀속되어있지 않고, 범용적으로 사용할 수 있도록 설계하기 때문이다
자료구조의 종류
자료구조는 크게 4가지로 분류되는데, 프로그래밍에서 가장 기초적인 데이터 타입인 단순 구조, 1대 1로 연결되어있는 선형 구조, 1대 다수 또는 다수 대 다수 관계로 이루어진 비선형 구조, 서로 관련있는 필드(Field)로 구성된 레코드(Record)집합인 파일에 대한 자료구조인 파일 구조가 있다.
이러한 자료구조들의 자세한 설명은 후에 하도록 하자.
출처
- https://ko.wikipedia.org/wiki/자료_구조
- https://helloworld-88.tistory.com/82
- https://hanamon.kr/자료구조란-자료구조를-배우는-이유/
- https://andrew0409.tistory.com/148
- https://ko.wikipedia.org/wiki/다형성_(컴퓨터_과학)
- https://0verc10ck.tistory.com/1
'Data Structure' 카테고리의 다른 글
[C] 이중 연결 리스트(Doubly Linked List)를 이용한 큐(Queue) 구현 (0) | 2022.03.02 |
---|---|
[C] 동적 할당을 이용한 스택(Stack) 구현 (0) | 2022.02.26 |
[C] 단일 연결 리스트(Single linked list) 구현 (2) | 2022.01.15 |