공부/Data Structure 5

자료구조 별 장단점(vector, list, queue, stack, map, hash map, tree)

vector list 장점 1. 일반 배열처럼 연속적인 메모리에 저장돼서 Index로 빠르게 접근 가능 2. 동적으로 메모리가 확장되는 기능 1. 어느 위치에서든 삽입/삭제가 빠름 단점 1. 중간 삽입/삭제가 느림 2. 확장이 필요할 때에 메모리 재할당과 복사로 비용 발생 -> Move Semantic으로 커버 가능 1. Index로 접근 불가능 stack queue 장점 1. LIFO 로 원소가 필요할 때 사용 가능 2. top에 위치한 원소에 빠르게 접근 가능 1. FIFO로 원소가 필요할 때 사용 가능 2. front에 위치한 원소에 빠르게 접근 가능 단점 1. 중간에 위치한 원소에 대해 접근 불가능 1. 중간에 위치한 원소에 대해 접근 불가능 hash_map tree 장점 1. Key값을 이용해서..

AVL Tree

지난번에 작성한 Binary Search Tree에 이어서 자가 균형 트리의 한 종류인 AVL(Adelson-Velsky and Landis) Tree를 작성해보았다. 자가 균형 트리란 편향 트리(skewed tree)가 되지 않도록, 트리의 균형을 스스로 맞추는 트리이다. 당연히 편향 트리가 되면 트리로 탐색을 하는데 비효율적이고 탐색, 삽입의 평균적인 시간 복잡도 logN을 보장하지 못한다. 구현한 부분에 있어서 특징은, 코드에서 볼 수 있듯이, Rebalance함수가 재귀적으로 계속 부모 노드를 타고 올라가면서 호출된다는 점이다. insert함수에서는 새로 삽입된 NewNode를 타고 올라가고, erase에서는 지우는 동작이 끝나고 지운 노드를 대체할 노드(LeftMax or RightMin)의 부..

이진 탐색 트리(Binary Search Tree), 화살표 연산자 오버로딩(-> operator overloading, arrow operator overloading)

이진 탐색 트리 규칙 : 작으면 왼쪽, 크면 오른쪽 전위 순회(preorder traversal) : root -> left -> right 순서 중위 순회(inorder traversal) : left -> root -> right 순서 후위 순회(postorder traversal) : left -> right -> root 순서 완전 이진 트리(Complete binary tree) : 마지막 레벨 빼고 모두 차있는 경우 포화 이진 트리(perfect binary tree) : 마지막 레벨까지 모두 차있는 경우 편향 트리(skewed binary tree) : 한쪽으로만 자라는 tree. 예를 들어 아래와 같은 tree insert, find는 현재 노드보다 큰지, 작은지에 따라 좌우 케이스로 나눠..

Linked list 구현

Linkedlist.h (템플릿으로 구현해서 헤더파일에 구현까지 넣음) #pragma once template class CNode { // 생성자, 소멸자를 privated으로 두고 CLinkedlist를 friend로 선언해서 // 외부에선 생성못하고 CLinkedlist만 생성할 수 있도록 함 private: CNode() {} ~CNode() {} private: template friend class CLinkedlist; template friend class CIterator; private: CNode* m_Next; CNode* m_Prev; T m_Data; }; template class CIterator { private: template friend class CLinkedlist..