Data Structure 8

해쉬맵 (HashMap)과 해쉬테이블 (HashTable)

해쉬맵(HashMap) Java에서 제공하는 데이터 구조 중 하나로, 키(Key)와 값(Value)의 쌍을 저장하는 자료구조로 빠르게 데이터를 검색하고 저장할 수 있음 키와 값의 쌍: 각 요소를 키와 값의 쌍으로 저장하며 쌍은 서로 연결되어 있으며, 특정 키를 통해 해당 값에 빠르게 접근할 수 있음 중복 키 불가: 키는 중복되지 않고 동일한 키를 여러 번 추가할 수 없음 순서 보장하지 않음: 요소들의 순서를 보장하지 않고 데이터가 저장된 순서대로 접근할 수 없음 검색 및 삽입 시간 복잡도: HashMap은 해시 테이블을 사용하기 때문에 키를 기반으로 데이터를 검색하고 삽입하는 데 평균적으로 O(1)의 시간 복잡도를 가지지만 해시 충돌(Hash Collision)이 발생할 경우 시간 복잡도는 O(n)이 될..

그래프 (Graph)

개체 간의 관계를 표현하는 자료 구조 무방향 그래프 (Undirected Graph) 간선(Edge)이 방향을 가지지 않는 그래프 간선은 두 노드 사이의 연결을 나타냅 package datastructure.nonlinear; import java.util.*; class UndirectedGraphTest { private int V; // 노드 수 private LinkedList adjacencyList[]; // 인접 리스트 UndirectedGraphTest(int v) { V = v; adjacencyList = new LinkedList[v]; for (int i = 0; i < v; ++i) adjacencyList[i] = new LinkedList(); } // 노드와 연결된 간선 추가..

트리 (Tree)

비선형 자료구조로, 계층적인 관계를 나타내는 데 사용 일반 트리(General Tree) 루트 노드에서 여러 개의 자식 노드를 가질 수 있는 트리 구조 각 노드는 부모와 자식 노드를 가리키는 포인터(링크) package datastructure.nonlinear; import java.util.ArrayList; import java.util.List; class TreeNode { int data; List children; TreeNode(int data) { this.data = data; children = new ArrayList(); } } public class GeneralTreeTest { public static void main(String[] args) { TreeNode root ..

데크 (Deque)

Double-ended queue의 줄임말로, 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료구조 package datastructure.linear; import java.util.*; public class DequeTest { public static void main(String[] args) { // Deque 생성 Deque deque = new LinkedList(); // 데크 앞뒤로 원소 추가 deque.addFirst("First"); // Deque 앞에 원소 추가 deque.addLast("Last"); // Deque 뒤에 원소 추가 // 데크 출력 System.out.println("Deque: " + deque); // 출력: Deque: [First, Last] // 앞뒤 원소 ..

큐 (Queue)

데이터를 선입선출(FIFO - First-In-First-Out) 방식으로 관리하는 자료구조로써 가장 먼저 추가된 데이터가 가장 먼저 꺼내지게 됨 package datastructure.linear; import java.util.LinkedList; import java.util.Queue; public class QueueTest { public static void main(String[] args) { // 큐 생성 Queue queue = new LinkedList(); // 데이터 추가 (enqueue) queue.offer(1); queue.offer(2); queue.offer(3); // 큐의 상단 데이터 확인 (peek) System.out.println("Front element: "..

연결 리스트 (Linked List)

데이터를 노드(Node)로 구성하고 노드들이 포인터를 통해 연결된 리스트 데이터의 동적인 관리와 삽입/삭제 연산이 주로 필요한 경우에 유용하며, 특히 크기가 미리 예측하기 어려운 상황에서 활용됨 장점 크기의 제한이 없음: 연결 리스트는 동적으로 크기를 조절할 수 있으므로, 데이터의 추가 및 삭제가 자유로움 삽입과 삭제가 용이: 원하는 위치에 노드를 추가하거나 삭제하기가 상대적으로 간단하며 포인터로 연결되어 있어 가리키는 노드만 변경 메모리 효율적 활용: 크기가 동적이므로 필요한 메모리만 사용하며, 메모리의 재사용이 가능 데이터의 순차적 배치: 데이터 입력시 주소가 순차적이지 않아 요소를 메모리의 어느곳에나 배치할 수 있어 메모리 관리 측면에서 유용 단점 랜덤 액세스 불가: 연결 리스트는 노드들이 포인터로..

배열 (Array)

동일한 데이터 타입의 여러 데이터를 하나의 변수에 저장하며 각 요소는 인덱스를 통해 접근 장점 고정된 크기: 배열은 선언할 때 크기를 정해야 하므로 메모리 관리가 용이하며 크기가 변경되지 않기 때문에 오버헤드가 적음 빠른 접근: 메모리 공간이 연속적이고 물리주소와 논리주소가 동일하므로 인덱스를 사용하여 요소에 직접 접근하기 때문에 빠름 (인덱스를 사용할 수 있어 시간복잡도(Time Complexity)가 O(1) 임) 단점 고정된 크기: 크기를 변경하기 어렵고 요소를 추가하거나 제거하려면 새로운 배열을 생성하고 기존 데이터를 복사해야 하므로 새로운 배열을 이동시키는데에는 O(n)의 시간복잡도가 소요됨 메모리 낭비: 배열은 크기를 미리 정해야 하므로 필요한 메모리보다 많은 메모리를 할당할 수 있음 인덱스 ..

자료구조 (Data Structure)

데이터 값의 모임으로, 데이터를 효율적으로 저장하고 조직화하며, 데이터에 대한 접근과 수정을 효율적으로 수행하기 위한 방법이나 구조 단순구조 (Primative Struecture) 정수(Integer) 실수(Float) 문자(Character) 문자열(Pointer) Boolean 비단순구조 (Non-Primative Struecture) 선형 구조(Linear Structure): 순차리스트(ArrayList), 연결리스트(Linked List)(단순 연결리스트, 이중 연결 리스트, 원형 연결 리스트), 스택, 큐, 덱 비선형 구조(Non-Linear Structure) 파일 구조(File Structure) 비단순구조 (Non-Primative Struecture) 선형 구조(Linear Struc..