목록자료구조 (10)
우당탕탕 코딩도전기

숙제 12-1 연습문제 교재 p.461 (1) 교재에 있는 그래프에 대하여 정점 3에서 출발하여 너비 우선 탐색을 한 경우의 방문 순서를 쓰세요. 3 1 4 0 2 5 6 7 8 9 (3) 정점 3에서 출발하여 깊이 우선 탐색을 한 경우의 방문 순서를 쓰세요. 3 4 2 1 0 5 6 7 8 9 숙제 12-2 위와 같이 그래프가 주어졌을 때, V(정점집합), E(간선집합)을 쓰세요. V = {A, B, C, D}, E = {(A, B), (B, D), (C, D)} •Adjacent list(인접 리스트)를 쓰세요. A -> B B -> D C -> D D •Topological sort(위상 정렬)하여 정점을 나열하세요. A - B - C - D C - A - B - D •위상 정렬 알고리즘 pseud..

1. 교재 MaxHeap 예시 코드 변경한 코드 #include using namespace std; #define MAX_ELEMENT 200 class HeapNode { int key; public: HeapNode(int k = 0) : key(k) {} void setKey(int k) { key = k; } int getKey() { return key; } void display() { cout getParent(i).getKey()) { node[i] = getParent(i); i /= 2; } node[i].setKey(key); } HeapNode remove() { if (isEmpty()) return HeapNode(); HeapNode item = node[1]; HeapNod..
1. 첨부의 코드를 이해하고, 첨부 코드를 이용해 BinSrchTree 클래스의 search 함수를 구현하세요(주석 표기된 부분). BinaryNode* BinSrchTree::search(BinaryNode* n, int key) { if (n == NULL) return NULL; if (key == n -> getData()) return n; else if (key getData()) return search(n->getLeft(), key); else return search(n->getRight(), key); } 2. 1번을 수행한 뒤, 교재 9장 프로그래밍 프로젝트 1번 중 하나인 getHeight 함수(트리의 높이를 구하는 함수)를 구현하세요. 트리의 높이에 대한 정의는 교재의..

문제 원판이 4개일 때 하노이탑 풀이 과정 서술하기 코드 #include using namespace std; void hanoiTower(int n, char from, char tmp, char to) { if (n == 1) cout
문제 1. 클래스 설계 노드 클래스를 단순하게 만들고 연결 관계를 포함한 노드 처리 연산을 리스트 클래스에서 구현하는 방법과 노드 클래스에서 가능한 많은 기능을 구현하고 리스트 클래스에서 이들을 사용하는 방법의 차이점은 이렇게 정리할 수 있다. 첫 번째 방법은 리스트 클래스의 구현을 간단하게 할 수 있다. 노드 클래스는 단순해져서 가독성이 높아지며, 노드 처리 연산의 구현에 대한 책임이 리스트 클래스로 넘어가므로 유지보수성이 좋아진다. 또한, 리스트 클래스에 다양한 기능을 추가하기도 쉬우므로, 유연성이 높아진다는 장점이 있다. 반면에 두 번째 방법은, 노드 클래스에서 다양한 기능을 지원할 수 있다는 점에서 첫 번째 방법과 다르다. 이는 노드 클래스의 객체를 만들 때 필요한 정보가 적어지므로 객체 생성에 ..
문제 1. 다음과 같은 문장이 실행되면 i값은 얼마인가? int i = 10; int* p; p = &i; *p = 8; i = 8 2. 다음과 같은 문장을 수행하고 난 뒤의 a[0]의 값은? void sub(int b[]) { b[0] = 0; } void main() { int a[] = {1, 2, 3, 4, 5, 6} sub(a); } a[0] = 0 3. 단순 연결 리스트의 노드들을 노드 포인터 p로 탐색하고자 한다. p가 현재 가리키는 노드에서 다음 노드로 가려면 어떻게 하여야 하는가? 3 - p = p -> link;
문제 1. 덱은 스택의 기능과 큐의 기능을 모두 합니다. 그렇다면 왜 덱을 쓰지 않고 스택과 큐를 쓸까요? 스택은 먼저 들어온 데이터가 나중에 나오고, 나중에 들어온 데이터가 가장 먼저 나가는(LIFO) 방식이며, 큐는 먼저 들어온 데이터가 먼저 나가는(FIFO) 방식이다. 덱은 이런 스택과 큐의 기능을 모두 하기 때문에 양쪽에서 삽입, 삭제가 필요한 작업에 사용된다. 그러나, 이러한 작업이 필요한 경우가 많지 않고 스택과 큐에 비해 비교적 구현이 어렵기 때문에 덱보다 스택과 큐를 많이 사용한다. 2. (연습문제6)큐에 항목들을 삽입하고 삭제하는 연산은 시간 복잡도가 어떻게 될까요? 큐는 먼저 들어온 데이터가 먼저 나가는(FIFO) 자료구조이다. 데이터를 삽입할 때는 맨 뒤에, 삭제할 때는 맨 앞에서 삭..

문제 강의 시간에 배운 postfix 수식을 계산하는 코드를 작성하세요. 그리고 입력 데이터에 대해서 (1)번과 (2)번을 차례대로 출력하세요. (1) Postfix를 계산하는 과정에서 (1) 스택의 항목 개수가 최대일 때의 그 최대값은 무엇이고, (2) 계산 과정에서 스택의 항목 개수가 최대인 경우는 몇 번 일어나는지 (1)과 (2)를 출력하세요. (2) Postfix 계산 과정에서 세번째 수행되는 연산자를 처리하기 직전의 스택의 상태를 다음과 같이 출력하세요. 세번째 연산자가 없다면 empty로 출력하세요. 아래에서 (bottom)과 (top)은 출력하지 않아도 됩니다. (3) 계산 결과를 출력하세요. 코드 #include "OperandStack.h" #include using namespace s..