1. 자료구조(Data Structure)란?
자료구조(Data Structure)는 데이터를 효율적으로 저장하고 관리하기 위한 방법과 체계를 의미합니다. 프로그램 개발 및 소프트웨어 설계에서 중요한 역할을 하며, 알고리즘의 성능에 직접적인 영향을 미칩니다.
자료구조의 필요성
- 효율적인 데이터 처리: 데이터를 저장하고 검색, 삽입, 삭제와 같은 작업을 빠르고 효율적으로 수행할 수 있도록 도와줍니다.
- 알고리즘 성능 향상: 자료구조를 올바르게 선택하면 알고리즘의 시간 복잡도와 공간 복잡도를 최적화할 수 있습니다.
- 문제 해결 능력 향상: 다양한 문제를 해결하기 위한 기본 도구로, 복잡한 문제를 간단하게 풀 수 있게 해줍니다.
2.자료구조의 종류
자료구조는 크게 선형 구조와 비선형 구조로 나눌 수 있습니다.

1. 선형 구조 (Linear Data Structures)
선형 구조는 데이터가 연속적이거나 논리적으로 순서대로 배치된 구조를 의미합니다. 데이터가 하나의 선(line)처럼 나열되며, 데이터 간의 관계는 1:1입니다.
배열 (Array)

- 특징:
- 고정된 크기의 연속적인 메모리 공간에 데이터를 저장합니다.
- 데이터를 저장할 때 각 요소에 고유한 인덱스를 할당하여 빠르게 접근할 수 있습니다.
- 배열의 크기는 초기화 시 고정되며, 변경이 어렵습니다.
- 장점:
- 인덱스를 통해 요소에
O(1) 시간 복잡도로 접근할 수 있음.
- 메모리 상에서 연속적으로 배치되어 있어 캐시 성능이 우수함.
- 단점:
- 크기가 고정되어 있어 유연성이 부족함.
- 삽입 및 삭제 시 많은 데이터 이동이 필요하여 비효율적일 수 있음 (최악의 경우
O(n)).
- 활용 사례:
- 테이블 데이터, 간단한 데이터 집합, 정렬된 데이터 저장 등.
연결 리스트 (Linked List)

- 특징:
- 데이터를 저장하는 노드(Node)들이 포인터로 연결된 구조입니다.
- 각 노드는 데이터를 저장하는 부분과 다음 노드를 가리키는 포인터를 포함합니다.
- 배열과 달리 크기가 동적으로 변경될 수 있습니다.
- 장점:
- 동적 메모리 할당이 가능하여 유연성이 큼.
- 삽입 및 삭제가 효율적임 (
O(1)로 특정 위치에 삽입/삭제 가능).
- 단점:
- 특정 요소를 검색할 때
O(n)의 시간 복잡도가 발생함.
- 각 노드가 포인터를 추가로 저장하므로 메모리 사용량이 배열보다 큼.
- 유형:
- 단일 연결 리스트 (Singly Linked List)
- 이중 연결 리스트 (Doubly Linked List)
- 환형 연결 리스트 (Circular Linked List)
- 활용 사례:
- 메모리 효율적인 동적 데이터 구조, 작업 스케줄링, 구현이 유연한 데이터 구조.
스택 (Stack)

- 특징:
- 후입선출(LIFO, Last In First Out) 방식으로 작동하는 자료구조.
- 삽입(push)과 삭제(pop)는 항상 스택의 한쪽 끝에서 이루어짐.
- 최상단 요소를 확인하는 연산(peek)이 가능함.
- 장점:
- 구현이 간단하고 효율적임.
- 함수 호출 스택, 뒤로 가기 기능과 같은 재귀적 데이터 처리에 유용함.
- 단점:
- 크기가 고정된 배열 기반 스택은 크기 제한이 있음.
- 특정 요소를 검색하는 작업은 비효율적임.
- 활용 사례:
- 함수 호출 관리, 계산기 프로그램, undo/redo 기능, 깊이 우선 탐색(DFS).
큐 (Queue)

- 특징:
- 선입선출(FIFO, First In First Out) 방식으로 작동하는 자료구조.
- 삽입(enqueue)은 뒤에서, 삭제(dequeue)는 앞에서 이루어짐.
- 순서가 중요한 작업 처리에 적합함.
- 장점:
- 데이터 처리의 순서를 유지할 수 있음.
- 작업 대기열이나 메시지 전달 시스템에서 사용하기 적합함.
- 단점:
- 배열 기반 큐에서는 크기 제한이 존재하며, 크기를 초과하면 재할당 필요.
- 특정 요소 검색이 비효율적임.
- 유형:
- 원형 큐(Circular Queue)
- 우선순위 큐(Priority Queue)
- 이중 끝 큐(Deque)
- 활용 사례:
- CPU 작업 스케줄링, 네트워크 데이터 패킷 처리, 프린터 작업 대기열.
2. 비선형 구조 (Non-Linear Data Structures)
비선형 구조는 데이터가 계층적이거나 네트워크처럼 복잡한 관계를 가지는 구조를 의미합니다. 데이터 간의 관계는 1:다 또는 다:다입니다.
트리 (Tree)

- 특징:
- 계층적인 구조로, 루트 노드(root)를 기준으로 여러 하위 노드(child)가 연결됨.
- 각 노드는 자식 노드를 가질 수 있으며, 자식 노드 간에는 순서가 없습니다.
- 장점:
- 빠른 검색, 삽입, 삭제가 가능 (
O(log n) 복잡도).
- 계층적 데이터 표현이 용이.
- 단점:
- 복잡한 구현과 메모리 오버헤드 발생 가능.
- 균형이 맞지 않을 경우 성능 저하 가능.
- 유형:
- 이진 트리 (Binary Tree): 각 노드가 최대 두 개의 자식을 가짐.
- 이진 탐색 트리 (BST): 왼쪽 자식은 부모보다 작고, 오른쪽 자식은 부모보다 큼.
- AVL 트리, 레드-블랙 트리: 균형을 유지하는 트리 구조.
- 활용 사례:
- 파일 시스템, 데이터베이스 인덱싱, 네트워크 라우팅.
그래프 (Graph)

- 특징:
- 정점(Vertex)과 간선(Edge)으로 구성된 네트워크 형태의 자료구조.
- 간선에 방향성이 있으면 방향 그래프, 없으면 무방향 그래프.
- 간선에 가중치가 있을 경우 가중치 그래프.
- 장점:
- 복잡한 데이터 관계를 표현 가능.
- 최단 경로, 네트워크 연결 문제 등에 적합.
- 단점:
- 구현이 복잡하며, 많은 메모리를 사용할 수 있음.
- 탐색 및 경로 계산이 시간이 오래 걸릴 수 있음.
- 유형:
- 인접 리스트 (Adjacency List)
- 인접 행렬 (Adjacency Matrix)
- 최소 신장 트리, 다익스트라 알고리즘 등.
- 활용 사례:
- 소셜 네트워크 분석, 최단 경로 탐색 (네비게이션 시스템), 전자 회로 설계.
자료구조의 선택 기준
효율적인 자료구조를 선택하려면 다음과 같은 요소를 고려해야 합니다:
- 데이터 크기와 구조: 데이터의 크기와 형식에 따라 적합한 자료구조가 달라집니다.
- 작업 빈도: 검색, 삽입, 삭제 작업이 얼마나 자주 이루어지는지에 따라 최적의 자료구조가 결정됩니다.
- 메모리 사용: 제한된 메모리 환경에서 공간 효율적인 자료구조를 선택해야 합니다.
- 복잡도: 시간 복잡도와 공간 복잡도를 비교하여 요구사항에 맞는 자료구조를 선택합니다.
결론
자료구조는 프로그래밍에서 데이터를 효과적으로 다루기 위한 핵심 개념입니다. 적절한 자료구조를 선택하고 활용하면 소프트웨어의 성능과 안정성을 크게 향상시킬 수 있습니다. 따라서 다양한 자료구조의 특성과 사용 사례를 이해하고, 문제에 맞는 자료구조를 적용하는 능력을 기르는 것이 중요합니다.
참고
https://bnzn2426.tistory.com/115