Data Structures & Algorithms

트리란?트리는 계층적 구조를 가지는 자료구조로, 노드(Node)와 그 사이의 연결인 엣지(Edge)로 구성된다.부모-자식 관계를 통해 노드들이 계층적으로 연결된 형태를 가진다.트리는 일반적으로 계층적 데이터를 표현, 검색, 정렬과 같은 문제를 해결하는 데 사용된다. 트리의 기본 구성 요소노드(Node) : 트리의 기본 단위, 데이터와 자식 노드에 대한 정보를 담고 있다.(Root, Parant, Child, Leaf 등에 해당된다.)엣지(Edge) : 트리의 각 노드가 부모와 자식 노드를 연결하는 선이다.부모(Parent) : 자식을 가진 노드이다.자식(Chlid) : 부모 노드로부터 연결된 노드이다.서브트리(Subtree) : 트리의 한 노드와 그 노드의 자식들로 구성된 트리이다.리프(Leaf) : 자..
연결리스트(Linked List)란 연결리스트(Liked List)는 데이터 요소들을 순차적으로 저장하는 선형 자료구조이다. 각 요소는 데이터와 다음 요소를 가리키는 포인터로 이루어져 있다. 따라서 연결 리스트는 메모리에서 연속적으로 할당되지 않는 노드들이 포인터를 통해 연결되어 있는 형태를 가지고 있다. 핵심 특징 동적할당 요소를 추가하거나 삭제할 때마다 필요한 만큼의 메모리를 동적으로 할당하므로, 크기가 동적으로 조절될 수 있다. 삽입 및 삭제 용이성 요소의 삽입 및 삭제가 쉽다. 요소를 삽입할 때는 새로운 요소를 추가하고, 삭제할 때는 해당 요소를 연결에서 제거하면 된다. 메모리의 효율성 연결 리스트는 데이터 요소들이 메모리에서 연속적으로 배치되지 않기 때문에, 데이터 요소들 간의 간격이 듀오적으로..
배열의 특징 배열은 연속된 메모리 공간에 순차적으로 저장된 데이터 모음이다. 프로그래밍 언어에서 동일 데이터 타입을 저장 하며, 다른 타입의 요소를 저장할 수 없다. 배열을 구성하는 각각의 값을 요소(element), 배열에서 위치를 가리키는 숫자를 인덱스(index)라고 한다. 배열의 시간 복잡도 Operation average case worst case 읽기(read) O(1) O(1) 삽입(insert) O(n) O(n) 삭제(delete) O(n) O(n) 탐색(search) O(n) O(n) 시간 복잡도의 특징은 항상 최악의 상황을 고려한다. 읽기의 시간복잡도는 특정 인덱스로 바로 접근이 가능하기 때문에 O(1)이다. 삽입의 시간 복잡도는 원하는 인덱스에 삽입, 그 이후의 인덱스는 오른쪽 한칸..
스택(Stack)과 큐(Queue) 스택과 큐는 제약을 갖는 배열이다. 제약하는 데이터 구조를 사용하면 잠재적 버그를 막을 수 있으며 문제를 해결하는 새로운 사고방식을 제공한다. 또한, 제약을 제대로 이해해서 작성한 코드는 다른 개발자에게 익숙하고 명쾌하게 읽힌다. 그 알고리즘이 그러한 제약을 가진 채로 동작함을 알게 된다. 스택(Stack) 스택 연산을 묘사하자면 (Last In, First Out) 후입선출을 뜻한다. 처음 들어간 원소가 마지막에 나온다. 스택은 다음과 같은 세 가지 제약이 있다. 데이터는 스택의 끝에만 삽입 가능 데이터는 스택의 끝에서만 삭제 가능 스택의 마지막 원소만 읽을 수 있음 또 한, 스택의 특징은 스택의 끝을 top 스택의 시작을 bottom 스택의 top에서 원소를 제거하..