본문 바로가기

전체 글

[C++] Operator Overloading part.2 유도 클래스의 대입 연산자에는 아무런 명시를 하지 않으면, 기초 클래스의 대입 연산자가 호출되지 않는다. 유도 클래스의 대입 연산자 정의에서, 명시적으로 기초 클래스의 대입 연산자 호출문을 삽입하지 않으면, 기초 클래스의 대입 연산자는 호출되지 않아서, 기초 클래스의 멤버변수는 멤버 대 멤버의 복사 대상에서 제외된다. class First { private: int num1, num2; public: ... First& operator=(const First& ref) { num1 = ref.num1; num2 = ref.num2; return *this; } ... } class Second : public First { private: int num3, num4; Second& operator=(co.. 더보기
Old... 더보기
[Data Structure] Priority Queues, Heaps, Graphs and Sets 1. 우선순위 큐 우선순위를 가지는 Queue이다. 기존의 Queue에 priority라는 변수를 추가적으로 선언, Queue를 dequeue할 때, 이 Priority를 기준으로 dequeue한다. 이때, 동일한 Priority를 가지고 있다면, FIFO로 dequeue한다. 2. 힙 Heap은 Binary Search Tree와 유사한 자료구조다. 이는 BST에 우선순위 큐를 위하여 만들어진 자료구조로, 여러 개의 값들 중에서 최댓값이나 최솟값을 빠르게 찾아낼 수 있도록 만들어진 자료구조이다. max Heap 부모 노드의 키 값이 자식 노드의 키 값보다 크거나 같은 완전 이진 트리 min Heap 부모 노드의 키 값이 자식 노드의 키 값보다 작거나 같은 완전 이진 트리 구현은 다음 포스팅을 참조하면 .. 더보기
[Data Structure] Binary Search Tree 1. Tree 트리는 노드로 구성된 자료구조이다. 트리의 기본 조건은 다음과 같다. 시작점을 나타내는 유일한 시작 노드인 'Root Node'를 가진다. Root Node는 0개 이상의 Child Node를 가진다. 해당 Child Node는 Parent Node로써 0개 이상의 Child Node를 가지고 있고, 이는 반복적으로 정의된다. 트리는 기본적으로, 사이클이 존재하지 않는다. 이는 Graph와의 차이점이다. 트리의 구성 요소 Root: 트리의 unique한 시작 노드 Node: 트리를 구성하는 단위 Parent Node: 1개 이상의 Child Node를 갖는 선행 노드 Child Node: 하나의 Parent Node를 갖는 후행 노드 Level: Root Node를 기준으로 Tree의 De.. 더보기
[C++] Operator Overloading 연산자 오버로딩 1. 연산자 오버로딩의 이해 함수의 오버로딩은 오버로딩 된 수만큼 다양한 기능을 사용할 수 있다. 연산자 오버로딩도 이와 같다. 기존에 존재하던 연산자의 기본 기능 이외에 다른 기능을 추가할 수 있다. 다음의 코드를 보자. #include using namespace std; class Point { private: int xpos, ypos; public: Point(int x = 0, int y = 0) xpos(x), ypos(y) {} void ShowPosition() const { cout 더보기
[Algorithm] BFS 탐색 시, 너비를 우선으로 탐색하는 기법으로 시작점과 가까운 것 위주로 탐색한다. 이러한 BFS의 특징은 맹목적 탐색 과 최단길이 보장이다. 0. Queue에 start 노드를 넣는다. 1. Queue에서 하나의 노드를 꺼낸다. 2. 해당 노드에 연결된 노드중 방분하지 않은 노드를 방문하여 차례대로 큐에 삽입한다. 3. 1-2 과정을 Queue에 요소가 남지 않을 때 까지 반복한다. #include #include #include #define MAX_NODE INT_MAX using namespace std; bool visited[MAX_NODE];// Queue의 요소에 접근하였다는 것을 알려주는 배열 vector array[MAX_NODE + 1];// 요소가 들어있는 vector graph vo.. 더보기
[Data Structure] Recursion 재귀함수 자기 자신을 호출하는 함수이다. 가장 널리 알려진 예제가 펙토리얼(!) 계산 문제이다. 재귀함수를 이용하면 Divide and Conquer, Binary Search Tree 등을 구현할 수 있다. 개념적으로 중요한 함수이지만 실행시간 측면에서는 썩 유리한 함수는 아니다. 호출하는 값이 커질수록, 수행시간이 기하급수적으로 증가하기 때문이다. 더보기
[Data Structure] List Plus 1. Circular Linked List 연결 리스트가 원형으로 돈다. 앞선 Queue와 마찬가지로, front와 rear를 연결해준다. 2. Doubly Linked List 앞 뒤 요소간 연결이 이중으로 연결된 것이다. 앞 요소는 뒷 요소를 가리키고, 이와 동시에 뒷 요소는 앞 요소를 가리킨다. 이 방법을 이용하면, 한 쪽으로만 이동 즉 탐색 시간을 줄일 수 있다. 단, 기존 방식에서 next 포인터가 아닌 별도의 포인터가 하나 더 필요하며, 할당 시 조금 더 복잡해진다. 더보기