- [ 자료구조 ][자료구조] 트리(Tree)2024-08-13 12:29:41트리란?트리는 그래프의 일종으로 계층적인 구조를 가지며 노드(Node)로 구성된다.각 노드는 데이터를 포함하고, 다음 노드들과 연결될 수 있다. 용어루트 노드(Root)- 부모가 없는 트리의 최상위 노드- 트리는 하나의 루트 노드 가짐 부모 노드(Parent)- 자식 노드를 가지는 노드로 상대적 개념- 2의 부모 노드는 1- 4의 부모 노드는 2 자식 노드(Child)- 부모 노드로 부터 가리켜지는 하위 노드- 1의 자식 노드는 2, 3- 2의 자식 노드는 4, 5 리프 노드(Leaf)- 자식 노드가 없는 트리의 말단 노드- 4, 5, 6이 해당 형제 노드(Sibling)- 같은 부모를 가지는 노드- 2, 3은 1을 부모 노드로 둔 형제 노드 레벨(Level)- 트리의 각 노드가 어느 깊이에 위치하는지 ..
- [ 자료구조 ][선형 자료구조] 덱/데크(Deque)2024-08-12 15:06:52덱(Deque)이란?덱(Deque)은 큐와 스택의 특성을 모두 가지는 자료구조이다.일반적인 큐와 달리, 덱은 양쪽 끝에서 삽입과 삭제가 가능하다. - 양쪽 끝에서의 삽입/삭제: 덱은 양쪽 끝에서 삽입과 삭제가 가능하며, 이로 인해 여러 가지 패턴의 자료처리가 가능합니다.- FIFO와 LIFO: 덱은 큐처럼 FIFO(First-In-First-Out) 방식으로도 동작할 수 있고, 스택처럼 LIFO(Last-In-First-Out) 방식으로도 동작할 수 있습니다. 구현class Deque { private var enque: [T] private var deque: [T] = [] var isEmpty: Bool { return enque.isEmpty && deque.i..
- [ 자료구조 ][선형 자료구조] 큐(Queue)2024-08-12 14:39:39큐(Queue)란?FIFO(First In First Out)으로 가장 먼저 삽입된 요소가 가장 먼저 제거되는 구조를 가진다.큐의 주요 연산으로는 Enqueue와 Dequeue가 있다. Enqueue - O(1)큐의 뒤쪽에 새로운 요소를 추가하는 연산 Dequeu - O(1)큐의 앞쪽에서 요소를 제거하고 반환하는 연산 사용 사례iOS GCD는 작업 수행을 위해 큐를 제공한다.UI 업데이트의 경우 메인 스레드에서 이루어져야 하기 때문에, GCD의 메인 큐를 사용하여 먼저 들어온 작업부터 처리하게 된다. 종류기본 큐 (Simple Queue)선입선출(FIFO, First In First Out) 방식으로 요소를 처리한다.원형 큐 (Circular Queue)배열의 끝과 시작이 연결된 형태로, 큐의 뒤쪽에서 ..
- [ 자료구조 ][선형 자료구조] 스택(Stack)2024-08-12 13:39:47스택이란?LIFO(Last In First Out)으로 가장 마지막으로 삽입된 요소가 가장 먼저 제거되는 구조를 가진다.이러한 특징을 가진 스택은 Push와 Pop을 기본 연산을 가지게 된다. Push데이터를 스택 맨 위에 쌓는 연산 Pop스택 맨 위에 데이터를 제거하고 반환하는 연산 사용 사례iOS에서 실제로 UINavigationController는 Push, Pop을 통해 뷰컨트롤러들의 스택을 관리하며 화면을 나타낸다. 그 외에도 DFS를 사용할 때 깊이 탐색을 위해 Stack을 사용하여 재귀 호출을 대체할 수 있다. 구현struct Stack { private var elements: [T] = [] init() { } mutating func push(_ element: ..
- [ 자료구조 ][선형 자료구조] 링크드 리스트2024-08-10 13:47:03링크드 리스트란? 데이터를 순차적으로 저장하는 선형 자료구조 중 하나이다.링크드 리스트의 요소는 노드(node) 형태로 존재하는데, node 안에는 데이터와 다음 노드의 메모리 위치를 가리키는 포인터로 이루어져 있다. 주요 특징연속적이지 않은 메모리 주소 링크드 리스트의 요소인 노드는 다시 두가지 부분으로 구성된다.- 데이터(Data): 노드가 저장하는 실제 데이터- 다음 노드(next node): 다음 노드의 메모리 위치를 참조하는 포인터 이렇게 구성 된 이유는 일반 배열의 경우 연속된 메모리 주소를 가지기 때문에, 삽입과 삭제시 O(n)의 시간복잡도를 가지게 된다.하지만 링크드 리스트의 경우 삽입/삭제시에도 가리키는 다음 주소만을 추가/수정해주면 되기 때문에 삽입/삭제 자체만으로는 O(1)의 시간복잡..
- [ 자료구조 ][선형 자료구조] 배열(선형 리스트)2024-08-08 15:36:39배열이란?선형 자료구조 중 선형 리스트에 해당하며,Swift에서는 표준 라이브러리가 제공하는 가장 기본적인 선형 자료구조이다. 주요 특징연속된 메모리 주소 배열은 모든 요소가 연속된 메모리 주소를 가지게 된다.같은 선형 자료구조이지만, 랜덤한 메모리 주소를 가지는 링크드 리스트와는 차이가 있다. 이러한 특징으로 인하여, 인덱스를 통한 임의 접근이 가능하며, 시간 복잡도는 O(1)를 가진다. 시간 복잡도임의 접근: O(1)임의 접근한 요소의 메모리 주소 = 시작 메모리 주소 + (인덱스 넘버 * 타입의 메모리 크기) 삽입/삭제 (배열 끝): O(1)마지막 배열에 추가/삭제 삽입/삭제 (배열 중간): O(n)중간에 삽입/삭제를 통해 그 뒤에 있는 요소들의 메모리 위치가 모두 변경
- [ 자료구조 ][자료구조] 선형 자료구조2024-08-08 15:15:44선형 자료구조(Linear Data Structure)란? 데이터의 요소들이 순차적으로 나열된 구조를 말한다.해당 구조에서는 요소들이 연속적으로 연결되어 있기 때문에, 순서대로 접근하여 탐색이 가능하다. 선형 자료구조로는 리스트, 스택, 큐, 데크(덱)가 존재한다. 이때 리스트 다시 선형 리스트(배열)와 링크드 리스트로 나뉜다. 주요 특징?1. 순차적 배치데이터의 요소들이 순차적으로 고유의 순서를 가지게 된다. 2. 단일 경로데이터는 이전 데이터와 다음 데이터와만 연결된다. 3. 연속된 메모리 주소Swift에서 스택, 큐, 데크는 배열 또는 링크드 리스트로 구현이 가능하다. 배열로 구현하게 된다면, 각 요소는 연속된 메모리 위치를 가지게 된다. 링크드 리스트로 구현하게 된다면, 각 요소는 비연속적인..