
자료구조(Data Structure)
- 컴퓨터는 현실 세계에서의 반복적이고 복잡한 자료들을 효율적으로 처리하기 위한 기계이다. 컴퓨터를 이용해서 자료를 처리하려면 먼저 컴퓨터가 잘 다룰 수 있는 형태로 표현해주어야만 한다.
- 사람들이 사물을 편리하고 효율적으로 사용하기 위해 정리하는 것과 마찬가지로 컴퓨터에서도 자료들을 정리하고 조직화 하는 여러 가지 구조들이 있다. 이를 자료구조라고 한다.
- 대량의 데이터를 효율적으로 관리할 수 있는 데이터의 구조를 의미하며 코드 상에서 효율적으로 데이터를 처리하기 위해, 데이터 특성에 따라, 체계적으로 데이터를 구조화해야 한다.
자료구조의 특징
- 효율성 - 자료구조를 사용하는 목적은 효율적인 데이터의 관리 및 사용이다. 따라서 목적에 맞게 적절한 자료구조를 선택하여 사용하는 것이 업무의 효율을 높혀준다.
- 추상화 - 복잡한 자료, 모듈, 시스템 등으로 부터 핵심적인 개념을 간추려 내는 것이다. 자료구조를 구현할 때 중요한 것은 어느 시점에 데이터를 삽입하고, 어느 시점에서 이 데이터를 어떻게 사용할 것인지에 대해 초점을 맞출 수 있기 때문에 구현 외적인 부분에 더 시간을 쏟고 알고리즘 자체에는 중점을 두지 않는다.
- 재사용성 - 자료구조를 설계할때 특정 프로그램에서만 동작하게 설계하지 않는다. 다양한 프로그램에서 동작할 수 있도록 범용성 있게 설계하기 때문에 해당 프로젝트가 아닌 다른 프로젝트에서도 사용할 수 있다.
자료구조의 분류
- 선형(linear) 자료구조
종류: 스택, 큐, 덱(deque), 리스트
항목들을 순서적으로 나열하여 저장하는 창고로 항목들을 접근하는 방법에 따라 다시 세분화된다.
스택, 큐, 덱: 항목의 접근이 맨 앞(잔단)이나 맨 뒤(후단)로 제한된다.
리스트: 가장 자유로운 선형 자료구조로 임의의 위치에 항목을 삽입하거나 삭제할 수 있다.
- 비선형(non-linear) 자료구조
종류: 트리(이진 탐색트리, AVL트리, 힙 트리), 그래프(가중치 그래프)
저장되는 항목들이 보다 복잡한 연결 관계를 가진다.
트리: 회사의 조직도나 컴퓨터의 폴더와 같은 계층 구조를 표현하기에 적합하다.
힙 트리: 우선순위 큐를 효율적으로 구현할 수 있다.
이진 탐색트리, AVL트리: 탐색을 위한 트리 구조
그래프: 지도나 인터넷 망 등 가장 복잡한 연결 관계를 표현할 수 있다.
가중치 그래프: 간선에 가중치가 포함되어 최단경로탐색과 같은 다양항 문제를 해결하기 위한 기본 구조로 사용된다.
