C++ 자료구조론(이석호) 30

[C++ Fundamentals of Data Structures/C++ 자료구조론(이석호)] 4.4 원형 리스트 체인 연습 문제

1. 체인에 있는 노드의 수를 계산하는 C++ 함수 length를 작성하라. 이 함수의 시간 복잡도는 얼마인가? int length() { ChainNode* ptr; if (isEmpty()) { return 0; } int length = 1; for (ptr = head->link; ptr != head; ptr = ptr->link) length++; return length; } * 시간 복잡도 : O(n) 원소의 개수만큼 반복 * 노드가 공백인 경우는 길이 0 반환. 아닌 경우는 1부터 시작하여 ptr을 head노드가 가르키는 노드부터 시작하여 head가 아닐때까지 반복 시킴. 2. x를 체인에 있는 임의의 노드를 지시하는 포인터라고 하자. 체인으로부터 이것을 삭제하는 C++ 함수를 작성하라...

[C++ Fundamentals of Data Structures/C++ 자료구조론(이석호)] 4.3 템플릿 클래스 체인 연습 문제

1. 연산자 link = x->link; } delete x; } void InsertBack(const T& e) { if (first) { last->link = new ChainNode(e); last = last->link; } else first = last = new ChainNode(e); } void Concatenate(Chain& b) { if (first) { last->link = b.first; last = b.last; } else { first = b.first; last = b.last; } b.first = b.last = 0; } void Reverse() { ChainNode* current = first, * previous = 0; while (current) { C..

[C++ Fundamentals of Data Structures/C++ 자료구조론(이석호)] 4.2 C++에서의 체인 표현 연습 문제

다음 연습문제들은 모두 4.2.4.절의 정의들을 기반으로 하고 있다. 모든 함수들은 클래스 Chain의 멤버 함수로 구현되는데, 그래서 이들은 ChainNode의 데이타 멤버들에 접근할 수 있다고 가정한다. 1. 체인에 있는 노드의 수를 계산하는 C++ 함수 length를 작성하라. 이 함수의 시간 복잡도는 얼마인가? * 시간 복잡도 : O(n) * 참고 : https://jaimemin.tistory.com/159 2. x를 체인에 있는 임의의 노드를 지시하는 포인터라고 하자. 체인으로부터 이것을 삭제하는 C++ 함수를 작성하라. 만일 x == first라고 하면, first는 체인에서 새로 첫 번째가 된 노드를 가리키도록 반드시 재설정 되어야 한다. 이 함수의 시간 복잡도는 얼마인가? * 시간 복잡도..

[C++ Fundamentals of Data Structures/C++ 자료구조론(이석호)] 3.4 C++의 서브타입과 상속 타입 연습문제

4. 다음의 쌍 각각에 대하여 IS-A 관계로 연결되는지 여부를 말하고 그 이유를 밝혀라, (a) 직사각형과 사다리꼴 둘 중의 하나를 어느 것의 서브 타입이라고 할 수 없음 (b) 직사각형과 원 둘 중의 하나를 어느 것의 서브 타입이라고 할 수 없음 (c) 사자와 호랑이 둘 중의 하나를 어느 것의 서브 타입이라고 할 수 없음 (d) 스택과 순서 리스트 스택이 정렬되어 있으면 순서 리스트라고 할 수 있으므로 IS-A 관계 (e) 큐와 순서 리스트 큐가 정렬되어 있으면 순서 리스트라고 할 수 있으므로 IS-A 관계

[C++ Fundamentals of Data Structures/C++ 자료구조론(이석호)] 3.3 큐 추상 데이타 타입 연습문제

2. 클래스 Queue에 큐의 크기와 원소 수를 반환하는 함수를 추가하라. 3. 클래스 Queue에 큐를 두 개의 큐로 분할하는 함수를 추가하라. 첫 번째 큐는 처음부터 시작해서 하나 건너 원소를 포함하고 두 번째 큐는 나머지 원소를 포함한다. 큐 원소의 상대적 순서는 변하지 않는다. 이 함수의 복잡도는 어떻게 되는가? #include #include using namespace std; template class Queue { private: T* queue; T* division1; T* division2; int front, rear, capacity; public: Queue(int queueCapacity = 10) : capacity(queueCapacity) { if (capacity < 1..

[C++ Fundamentals of Data Structures/C++ 자료구조론(이석호)] 3.2 스택 추상 데이타 타입 연습문제

1. 다음과 같은 함수를 첨가해서 스택 ADT를 확장하라: 스택을 출력하는 함수, 스택을 두 개의 스택으로 분할해서 하나는 밑으로부터 반을, 또 다른 하나는 나머지 원소를 포함하는 함수, 두 개의 함수를 하나로 합병하여 두 번째 스택에 있는 모든 원소를 첫 번째 스택의 톱에 설치하는 함수. 이 새로운 함수의 C++ 코드를 작성하라. #include #include using namespace std; template class Stack { private: T* stack; int top; int capacity; public: Stack(int stackCapacity = 10) : capacity(stackCapacity) { if (capacity < 1) throw "Stack capacity m..

[C++ Fundamentals of Data Structures/C++ 자료구조론(이석호)] 2.8 추가 연습문제

1. 배열 list의 원소의 순서를 제자리에서 역으로 만드는 C++ 함수를 작성하라. 즉 이 함수는 변환 list의 list[i]는 원래 list의 (n - i - 1)번째 워놋를 포함하도록 변환하여야 한다. 여기서 n은 list의 총 원소 수이다. 이 함수에서 추가로 사용할 수 있는 공간은 단순 변수들을 위한 것뿐이다. 알고리즘의 입력은 list와 n이다. 작성된 함수가 이 순서를 역으로 하기 위한 연산 시간은 얼마인가? #include using namespace std; void reverse(int list[], int n); int main() { int list[] = { 1,2,3,4,5,6,7,8,9,10 }; int len = sizeof(list) / sizeof(list[0]); cout

[C++ Fundamentals of Data Structures/C++ 자료구조론(이석호)] 2.6 스트링 추상 데이타 타입 연습문제

1,2,3,4,5번 문제 전체 코드 //String.h의 헤더파일 #ifndef String #include using namespace std; class String { private: char* str; int len; int* f; public: String(char* init, int m) :len(m) { str = new char[m + 1]; f = new int[m]; for (int i = 0; i < m; i++) str[i] = init[i]; str[m] = '\0'; //문자열의 끝은 항상 널이다 FailureFunction(); } ~String() { if (str != NULL) { delete[]str; str = NULL; } if (f != NULL) { delete[..

[C++ Fundamentals of Data Structures/C++ 자료구조론(이석호)] 2.5 배열의 표현 연습문제

1. [프로그래밍 과제] 다차원 배열이 C++에서 표준 데이타 객체로 제공될지라도 때로는 다차원 배열을 위해 클래스를 정의할 필요가 있다. 이 정의는 다음과 같은 보다 견고한 클래스를 표현한다. (a) 범위 검사를 수행한다. (b) 각 차원의 인덱스 집합으로 0부터 시작하는 연속적인 정수들로 구성되는 것을 요구하지 않는다. (c) 배열 지정을 허용한다. (d) 배열의 초기화를 다른 배열을 사용하여 할 수 있다. (e) 실행 시에 배열의 각 차원의 범위를 선택한다. (f) 배열의 범위와 크기를 동적으로 변경할 수 있다. (g) 배열의 크기를 판단할 수 있는 방법을 제공한다. 실수 원소를 저장하고 위에 명기된 기능들을 제공하는 클래스 mdArray를 구현하라. 이를 위해 동적으로 생성되는 1차원 배열인 원소..