Algorithm/Data Structure 7

[Leetcode] Binary Tree Inorder Traversal

[ 정답 - 반복 버전 ] 1) 초기 상태 2) 현재 ptr을 포함하여, 더이상 내려갈 수 없을 때까지 왼쪽으로 내려가며 그 위치를 스택에 쌓는다. 3) Stack에서 하나를 꺼내고 정답 vector에 넣는다. 현재 ptr은 Stack에서 마지막에 꺼내진 4를 가리키고 있다. 4) ptr을 현재 가리키고있는 ptr의 우측으로 이동한다. (여기서는 4의 우측 자손이 없으므로 ptr == nullptr일 것이다.) 5) 2),3) 4) 동작을 반복한다. ( 반복 동작 - [Stack이 비어있지 않다 or 현재가 nullptr이 아니다]의 조건을 만족하는 동안 ) 현재 ptr == nullptr이므로 - [2) 왼쪽으로 더이상 내려갈 수 없을때까지 왼쪽으로 간다]는 수행되지 않을 것이다. - [3) 스택에서 ..

3. 동적 배열 구현

[ 최종 구현(C#) ] using System; using System.Collections.Generic; namespace Test { public class MyList { private static int DEFAULT_SIZE = 1; private T[] Data = new T[DEFAULT_SIZE]; public int Count { get; private set; } = 0; // 현재 저장되어있는 개수 public int Capacity // 최대로 저장 가능한 용량 { get { return Data.Length; } } public void Add(T item) { // 공간이 없을 경우 공간을 확보한다 = 현재 공간 * 2 if(Count >= Capacity) { T[] new..

[C++ STL] set / multiset

* set / multiset 모두 BST(Binary Search Tree) 형태의 자료 구조이다. [ Set ] - 중복을 허용하지 않는 자료 구조. (중복을 허용하려면 multiset을 사용해야 함.) - 원소들은 자동으로 정렬된다. (insert) #include #include int main(void) { using namespace std; set setTest; setTest.insert(3); setTest.insert(4); setTest.insert(1); setTest.insert(2); setTest.insert(2); setTest.insert(4); setTest.erase(5); printf("%d\n", *setTest.find(4)); // 4 if (setTest.fin..

2. 큐(Queue) / 원형큐(Circular Queue)

2. 큐(Queue) - 한쪽 끝(뒤)에서는 자료를 삽입하고, 다른 한쪽 끝(앞)에서 자료를 출력하는 형태의 자료구조 - 가장 먼저 넣은 것이 가장 먼저 나오게 되므로 First In First Out(FIFO)라고 한다. - front : 출력이 일어나는 곳 - rear : 삽입이 일어나는 곳 [ 배열을 이용한 큐 구현 ] - 기본적인 형태의 Queue를 선형큐(Linear Queue)라고 한다. 선형큐의 단점은 데이터를 출력한 영역은 재사용 할 수 없다는 것이다. (선형큐에 데이터를 꽉채우고 모두 꺼내면 front와 rear 모두 마지막 Index를 가리키게 된다. ) - 이러한 문제점를 개선하기 위해 원형큐(Circular Queue)로 구현한다. 아래와 같이 큐의 끝의 다음이 처음이 되도록 구현된..

1. 스택(Stack)

1. 스택 - 한쪽 끝에서만 자료를 넣고 뺄 수 있는 자료 구조이다. - 마지막으로 넣은 것이 가장 먼저 나오기 때문에 Last in First Out(LIFO)라고 한다. [ 배열을 이용한 스택 구현 ] 0. 초기 상태 1. push 연산 : Stack에 데이터를 삽입 : 현재 size에 데이터를 삽입하고, size를 하나 증가시킨다. stack[size] = 4; size++; stack[size] = 3; size++; 2. pop 연산 : Stack에서 데이터를 꺼낸다. : 현재 size - 1에 있는 데이터를 출력하고 size를 하나 줄인다. int result = stack[size-1]; size--; return result; 3. Empty 연산 : Stack이 비었는지 비어있지 않은지를..