
자료구조는 데이터를 담기 위한 구조를 의미합니다. 이는 데이터들의 저장형태를 결정하는 것을 말합니다.
알고리즘은 어떤 문제를 해결하기 위해 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것을 말합니다. 즉, 어떤 사람이든 해당 알고리즘을 보고 같은 결과를 도출할 수 있어야 합니다.
일반적으로, 효율적인 알고리즘을 구현하기 위해 자료구조의 선택이 중요하며, 두 개념은 밀접한 관계를 갖습니다. 예를 들면, BFS를 구현하기 위해서는 Queue 자료구조가 사용되어야 합니다.
참고 자료
자료구조를 여러 기준에 따라 분류가 가능합니다.
구현
형태
선형 : 자료구조 내 원소들이 하나씩 순차적으로 나열시킨 형태.
비선형 : 하나의 원소 뒤에 여러개의 원소가 존재할 수 있는 형태.
파일구조
그래프와 트리 모두 노드와 간선으로 구성된 자료구조를 말합니다.
트리는 그래프에 포함된 자료구조의 일종으로써, 그래프는 하나의 노드에 여러 간선이 존재할 수 있짐만, 트리는 노드 간에 하나의 간선만 존재할 수 있습니다. 이로 인해 그래프보다 데이터를 탐색하는 것에 조금 더 용이하다는 장점이 있습니다.
비교
이진 탐색 트리는 이진 탐색과 연결리스트를 결합한 자료구조 입니다.
부모 노드는 최대 2개의 자식노드를 가질 수 있으며, 부모 노드를 기준으로 부모 노드보다 작은 값을 왼쪽으로 정렬하고 큰 값을 오른쪽으로 정렬해줍니다.
해당 개념은 이진 트리 탐색의 단점인 원소 추가,삭제가 불가하다는 점과 연결리스트의 단점인 탐색이 O(N)의 시간 복잡도가 발생하는 단점을 보완하기 위해 고안된 자료구조입니다.
해당 자료구조에서 연산하는 원리에 대해 간단하게 설명드리겠습니다.
트리순회 방식
두 자료구조 모두 선형자료 구조로 배열과 연결 리스트를 사용하여 구현이 가능합니다.
두 자료구조의 차이점은 다음과 같습니다.
스택은 LIFO 방식으로 구현된 자료구조 입니다. 이는 먼저 들어간 원소는 제일 마지막에 나오게 되는 자료구조를 말하며, 일반적으로 탑의 구조와 같습니다.
큐는 FIFO 방식으로 구현된 자료구조 입니다. 이는 먼저 들어간 원소는 제일 처음 나오게 되는 자료구조를 말하며, 일반적으로 파이프의 구조와 같습니다. 원소가 나오는 곳을 front 원소가 삽입되는 곳을 rear라고 합니다.
각각의 활용 예시를 들어보면,
스택의 대표적인 예시로 웹 브라우저 방문기록이 있습니다.
2개의 페이지를 열어준 뒤 순차적으로 스택A에 담아줍니다. 스택A의 가장 상위 요소가 현재 페이지를 의미합니다. 이전 페이지로 이동하기 위해서는 스택A를 pop해 준뒤 스택 B에 push 해줍니다. 그렇게 되면 이전 페이지가 스택A의 최상단에 위치하게 되는 방식으로 구현됩니다.
큐의 대표적인 활용 예시로는 대표적으로 대기열 구현입니다.
간단히 대기열 큐에 삽입 시 offer 해준 뒤 필요 개소에서 poll() 해주어 데이터를 가져옵니다.
Array는 크기가 고정되어 있고, ArrayList는 크기가 가변적입니다.
Array는 초기화 시 메모리에 할당되어 ArrayList보다 속도가 빠르고, ArrayList는 데이터 추가 및 삭제 시 메모리를 재할당하기 때문에 속도가 Array보다 느립니다.
사용 상황을 나누어 생각해보면,
우선, 원소의 크기가 정해져 있는 경우 배열을 사용하는 것이 효율적입니다.
그다음 다차원 자료구조가 필요한 경우 배열을 사용합니다.이는 Array의 경우 지원하는 자료구조 형태가 있지만, ArrayList는 직접 구현해줘야 하기 때문입니다.
💡 ArrayList에 크기가 변경되는 과정에 대해 이해하고 계신가요?