자료구조 정리
1. 자료구조란 무엇인가?
자료구조는 컴퓨터에서 데이터를 저장, 관리, 그리고 사용하는 구조를 의미합니다. 이를 통해 데이터의 접근과 수정이 보다 효율적으로 이루어질 수 있습니다. 예를 들어, 어떤 자료구조는 검색에 효율적이고, 다른 자료구조는 삽입과 삭제가 빠릅니다. 적절한 자료구조를 선택하면 프로그램의 성능이 크게 향상될 수 있습니다.
2. 자료구조의 분류
2.1 선형 자료구조
선형 자료구조는 데이터가 직선 형태로 연결된 구조입니다. 각 요소가 순차적으로 배치되어 있으며, 데이터들이 일직선 상에 있습니다.
예: 배열, 연결 리스트, 스택, 큐
2.2 비선형 자료구조
비선형 자료구조는 데이터가 계층적 또는 그물 형태로 연결된 구조입니다. 데이터들이 다양한 경로로 연결될 수 있습니다.
예: 트리, 그래프
3. 배열 (Array)
배열은 동일한 타입의 데이터를 순차적으로 저장하는 자료구조입니다. 고정된 크기의 메모리 블록에 연속적으로 저장되기 때문에 인덱스를 이용해 빠르게 접근할 수 있습니다.
+----+----+----+----+----+
| 90 | 85 | 78 | 92 | 88 |
+----+----+----+----+----+
인덱스: 0 1 2 3 4
4. 연결 리스트 (Linked List)
연결 리스트는 노드라는 개체들이 포인터를 통해 연결된 형태로 이루어진 자료구조입니다. 배열과 달리 크기가 동적으로 변할 수 있어, 데이터의 삽입과 삭제가 용이합니다.
[A] -> [B] -> [C] -> [D] -> NULL
5. 스택 (Stack)
스택은 후입선출(LIFO; Last In First Out) 구조로, 가장 최근에 삽입된 데이터가 가장 먼저 제거됩니다. 주로 재귀 호출의 추적이나 데이터의 역순 처리에 사용됩니다.
| 40 | <- Top (가장 최근에 추가된 값)
| 30 |
| 20 |
| 10 |
6. 큐 (Queue)
큐는 선입선출(FIFO; First In First Out) 구조로, 먼저 들어온 데이터가 먼저 나갑니다. 대기열이나 자원 관리에 주로 사용됩니다.
[Front] 10 -> 20 -> 30 -> 40 [Rear]
7. 트리 (Tree)
트리는 계층 구조를 나타내는 자료구조로, 노드로 구성되며 부모-자식 관계를 가집니다. 이진 트리가 가장 일반적인 형태입니다.
(A)
/ \
(B) (C)
/ \ \
(D) (E) (F)
8. 그래프 (Graph)
그래프는 노드(정점)와 노드 간의 연결(간선)로 이루어진 자료구조입니다. 네트워크 구조나 복잡한 관계를 표현하는 데 적합합니다.
(A) -- (B)
| \ |
(C) -- (D)
9. 해시 테이블 (Hash Table)
해시 테이블은 키-값 쌍으로 데이터를 저장하며, 해시 함수를 이용해 데이터를 빠르게 검색할 수 있는 자료구조입니다. 해시 테이블은 평균적으로 매우 빠른 검색, 삽입, 삭제 성능을 제공합니다.
예를 들어, 전화번호부를 해시 테이블로 구현할 수 있습니다. 이름을 키로, 전화번호를 값으로 저장합니다. 해시 함수는 각 키를 특정한 슬롯으로 매핑합니다.
충돌 해결 기법으로는 체이닝(Chaining)과 오픈 어드레싱(Open Addressing) 등이 있습니다. 체이닝은 각 슬롯에 연결 리스트를 사용하여 여러 데이터를 저장하는 방식이며, 오픈 어드레싱은 비어 있는 슬롯을 찾아 데이터를 저장하는 방식입니다.
+------------+
| 0 | --> [Alice, 12345]
+------------+
| 1 | --> [Bob, 67890]
+------------+
| 2 | --> [Charlie, 54321]
+------------+
'개발공부' 카테고리의 다른 글
인텔리제이(IntelliJ IDEA) 플러그인 추천 모음 (0) | 2025.01.06 |
---|---|
동기(Synchronous)와 비동기(Asynchronous) (0) | 2024.12.17 |
c++ 동적 메모리 할당 (0) | 2024.12.03 |
인텔리제이(IntelliJ IDEA) 단축키 모음 (6) | 2024.11.28 |
c++ 포인터란? (0) | 2024.11.21 |