
1. 배열과 연결 리스트: 개념 및 차이점

배열은 고정된 크기의 연속적인 메모리 공간에 동일한 데이터 타입의 원소를 저장하는 자료 구조입니다. 각 원소는 인덱스를 사용하여 접근할 수 있으며, 인덱스는 0부터 시작합니다.
O(1)입니다.메모리 효율이 좋습니다.고정되며, 크기를 변경하려면 새 배열을 생성하고 데이터를 복사해야 합니다.O(n)입니다.
연결 리스트는 각 원소가 데이터와 다음 원소를 가리키는 링크(포인터)로 이루어진 자료 구조입니다. 각 노드는 이전 노드와 다음 노드를 가리키는 링크로 연결되어 있습니다.
O(1)입니다.순차적으로 탐색해야 하므로 접근이 느립니다. 시간 복잡도는 O(n)입니다.추가 메모리 사용이 필요합니다.2. 배열의 적용 및 예시
배열은 다음과 같은 상황에서 유용합니다:
인덱스를 통한 빠른 원소 접근이 필요한 경우에 적합합니다. 예를 들어, 데이터베이스 검색 결과를 배열로 저장하면 특정 레코드에 빠르게 접근할 수 있으며 시간 복잡도는 O(1)입니다.배열을 사용하지 않는 경우:
동적으로 변하며, 중간에 데이터를 삽입하거나 삭제해야 하는 경우 LinkedList나 동적 배열과 같은 다른 자료 구조를 고려할 수 있습니다. 이러한 경우 시간 복잡도가 상대적으로 낮은 자료 구조를 선택해야 합니다.3. 스택과 큐: 개념 및 활용

스택은 선입후출의 특성을 가진 자료구조로, 원소가 추가되는 push와 원소가 제거되는 pop의 두 가지 주요 연산으로 이루어져 있습니다. 스택은 배열 또는 연결 리스트를 사용하여 구현할 수 있습니다.

큐는 선입선출의 특성을 가진 자료구조로, 원소가 추가되는 enqueue와 원소가 제거되는 dequeue의 두 가지 주요 연산으로 이루어져 있습니다. 주로 연결 리스트를 사용하여 큐를 구현합니다.
4. 우선순위 큐와 힙: 개념 및 구현

우선순위 큐는 큐와는 다르게 우선순위에 따라 원소를 꺼내게 됩니다. 우선순위 큐는 배열, 연결 리스트, 그리고 힙을 통해 구현될 수 있
습니다. 효율적인 구현을 위해선 힙이 주로 사용됩니다.
O(logN)의 시간 복잡도를 보장
힙은 '완전 이진 트리'의 특징을 갖는 특별한 트리 구조입니다. 부모 노드와 자식 노드 간에 일정한 순서 관계를 가집니다.
Heapify 연산)Heapify 연산)모든 삽입 및 삭제 연산은 O(logN)의 시간 복잡도로 수행됩니다.
5. 해시 테이블 (Hash Table)

해시 테이블은 Key-Value 쌍으로 값을 저장하는 자료구조입니다. 이 자료구조의 눈에 띄는 특징은 검색 시간 복잡도가 평균적으로 O(1)이라는 것입니다. 이는 해시 함수를 통해 Key를 특정 해시 값(인덱스)으로 빠르게 변환하고, 해당 인덱스를 바로 참조해 Value를 검색하기 때문입니다.
평균적으로 O(1)의 빠른 검색 속도를 제공하는데, 이는 해시 함수의 효과적인 변환 덕분입니다. 해시 함수는 Key를 고유한 해시 값(인덱스)으로 변환해주며, 이 인덱스를 통해 Value에 바로 접근할 수 있습니다.
때로는 서로 다른 Key가 같은 해시 값(인덱스)을 반환하는 해시 충돌이 발생할 수 있습니다. 이런 문제를 해결하기 위해 다음과 같은 방법들이 주로 사용됩니다:
체이닝 방식의 장단점:
개방 주소법의 장단점:
6. 이진 탐색 트리 (BST)와 AVL 트리

BST는 이진 트리의 특별한 형태로, 노드에 저장된 값들이 특정한 순서를 따르는 구조입니다. 주요 특징은:
O(logN)입니다.
AVL 트리는 BST의 균형을 유지하는 확장된 형태입니다. 주요 특징은:
높이 차이가 최대 1입니다.회전 연산을 수행합니다.
RBT는 BST의 한 종류로, 균형을 유지하는 특성을 가진 자료구조입니다. RBT는 삽입 및 삭제 연산 시 특정 규칙을 따라 색상을 변경하며 균형을 유지합니다. 노드의 child가 없을 경우 child를 가리키는 포인터는 NIL 값을 저장합니다. 이러한 NIL들을 leaf node로 간주합니다.
7. 이진 트리와 그래프
그래프
노드와 엣지로 구성된 포괄적인 구조로, 순환 구조를 포함할 수 있습니다.
이진 트리
특정한 규칙을 따르는 그래프의 한 형태입니다. 각 노드는 최대 두 개의 자식만을 가지며, 순환 구조는 존재하지 않습니다.
8. 이진 트리의 순회 (Traversal)
전위 순회 (Preorder Traversal)
루트 노드 → 왼쪽 서브 트리 → 오른쪽 서브 트리
중위 순회 (Inorder Traversal)
왼쪽 서브 트리 → 루트 노드 → 오른쪽 서브 트리
후위 순회 (Postorder Traversal)
왼쪽 서브 트리 → 오른쪽 서브 트리 → 루트 노드