챕터 8 연습문제1. 다음 중 선형 자료구조가 아닌 것은?가. 리스트 나. 스택 다. 큐 라. 트리답 : 라트리는 계층형 자료구조이다.2. 다음의 수식 이진 트리를 후위 순회하여 수식에 대한 후위 표기식을 구하여라.+*CD*BA+*A(NULL)*B(NULL)*(NULL)+*C(NULL)*D(NULL)*(NULL)+(NULL)답 : A B * C D * +3. 다음 중 같은 개수의 노드를 트리로 저장하는 경우에 트리의 높이가 가장 높은 트리는 무엇인가?가. 이진 트리 나. 포화 이진 트리 다. 완전 이진 트리 라. 편향 이진 트리답 : 라편향 이진 트리는 최소개수의 노드를 가지므로 왼쪽이나 오른쪽 서브트리만 가져서 일렬로큐 형태로 만든 자료구조이다.4. 20개의 노드로 구성된 이진 트리에서 간선의 개수와 가능한 최대 높이와 최소 높이를 구하여라.간선의 개수 = 노드의 개수-1 = 20-1 = 19개.최대 높이 h = n-1 = 20-1 = 19이진트리의 노드의 개수는 1, 3, 7, 15, 31 ... 이므로3-1= 2, 7-3 = 4, 15-7 = 8, 31-15 = 16bh = 2hbh = ah - ah-1, ah = ah-1 + 2h, ah =a1+(3+7+15+31+...+2h-1)-> 2h+1-1개포화이진트리의 노드의 개수 >= 완전이진트리의 노드의 개수2h+1-1 >= 20 , 2h+1 >= 21 , 2h>= 10.5위의 관계가 성립하기위한 최소의 h는 4이므로, 최소 높이는 4가 된다.답 : 간선의 개수 = 19개,가능한 최대 높이 = 19최소 높이 = 45. 다음의 원소를 차례로 삽입하면서 최대 히프를 구성하여라.3, 15, 56, 7, 33, 45, 20, 19답 :56*************. 위의 최대 히프에 대해서 삭제연산을 수행하여 원소가 삭제되는 순서를 쓰시오.답 : 56 → 45 → 33 → 20 → 19 → 15 → 7 → 37. 트리를 표현할 때 가장 적합한 자료구조는?가. Stack나. Queue다. Linked List라. Circular Queue답 : 다트리구조는 윗계층에서 아래계층으로 링크해줘야한다.8. 다음 트리의 터미널 노드 수는?ACBEFGHDIJ가. 2나. 4다. 6라. 10답 : 다. 69. 다음 트리를 포스트오더(Postorder)로 운행할 때 노드 E는 몇 번째로 검사 되는가?ACEFDB가. 2번째나. 3번째다. 4번째라. 5번째답 : 라. 5번째10. 다음 트리를 전위 순회한 결과는?
윈도우 핸들을 받아와 콘솔 화면에서 직접 삼각형을 드로잉하는 예제소스입니다.구조체 triangle을 이용하여 삼각형이 직각삼각형인지 여부를 판단하는함수 chek_triangle를 선언하였습니다.먼저 삼각형의 세 꼭지점의 좌표를 입력받으면 세 개의 직선을 그린후 꼭지점을 출력합니다. 그리고 세 직선의 제곱을 구한뒤, 직각삼각형을 구하는 공식에 대입해봅니다.이때 꼭지점은 세 개이므로 각각의 점에 대해 세 번 비교합니다.그리고 직각삼각형이면 ture를 리턴하고 직각삼각형이 아니면 false(0)을 리턴합니다.
최초 30분은 1000원이다. 그 이후 10분당 500원이다. 단, 4시간10분 이후 24시간까지는 모두 12,000원으로 계산한다. 24시간 이후는 앞서 계산된금액에다 최초 30분은 1000원, 그 이후 10분당 500원, 4시간10분 이후24시간까지는 12,000원이 추가되는 방식으로 계산된다.(예: 50시간 주차를 하였다면: 24시간 * 2 + 2시간으로 계산됨. 따라서,12,000*2+(1000+500*9) = 29,500원 임.) 요금을 계산하는 방식은 이렇습니다. 먼저 24시간 이상 일 때를 검사하고 나머지 시간을 계산합니다. 남는시간이 4시간 이후일때 11500을 더하고, 그렇지 않을때는 처음 30분일대 1000원을 더하고 나머지 10분마다 500원을 더합니다.처음 입력 과정에서 문자열을 입력해서 시간으로 변경하는 방식을 썼는데요,우선 문자열의 길이를 구한다음 문자열의 길이만큼 문자 하나하나를 숫자인지 문자인지 검사하고, 숫자일때에는 정수형변수에 값을 집어넣고 문자일때에는 처음 입력된 숫자값을 시간에다가 집어넣습니다. 그리고 다시 분을 똑같은 방식으로 읽어옵니다.
프로그램에 대한 본인의 해설,콘솔 화면에 두 점의 좌표 x, y를 입력받고 중점을 구한뒤 출력하는 프로그램.구조체 line을 이용하여 OnDrow 함수 안에서 선분의 중점을 구해 SetDot 함수로 점을 찍는 프로그램winAPI 함수를 써서 구현한 프로그램.C 언어 프로그램 소스,#include #include #include #include #define title system("title ~");struct point { //좌표를 넣을 구조체int x, y;};struct line { //선정보struct point a, b;};void OnDrow(line lie); //그리기 함수void SetText(HDC hdc, char* chr, int x, int y); //텍스트 출력 함수void SetDot(HDC hdc, int size, int dot_x, int dot_y, COLORREF color); //점찍기int main(void){ title //타이틀 지정line lie; //구조체 선언printf("첫번째 점 정보n");printf("(");scanf("%d", &lie.a.x);printf(",");scanf("%d", &lie.a.y);printf(")n");printf("두번째 점 정보n");printf("(");scanf("%d", &lie.b.x);printf(",");scanf("%d", &lie.b.y);printf(")n");OnDrow(lie); //그리기 함수getch(); //잠시 멈추기}//그리기 함수void OnDrow(line lie){HDC hdc; //핸들 선언HWND hwnd = GetConsoleWindow(); //콘솔윈도우 핸들 얻어오기HPEN hPen; //펜 선언hdc = GetDC(hwnd); //핸들에서 DC 얻어오기hPen = CreatePen(PS_SOLID, 3, RGB(150,100,205)); //선 굵기와 색상 설정SelectObject(hdc,hPen); //펜 선택MoveToEx(hdc,lie.a.x, lie.a.y,NULL);//시작점 이동LineTo(hdc,lie.b.x, lie.b.y); //선 그리기SetText(hdc, "a", lie.a.x, lie.a.y);SetText(hdc, "b", lie.b.x, lie.b.y);//선분의 중점 구하기SetDot(hdc, 3, (lie.a.x+lie.b.x)/2, (lie.a.y+lie.b.y)/2, RGB(200,100,10));//메모리 해제DeleteObject(hPen);ReleaseDC(hwnd,hdc);}//점 찍는 함수void SetDot(HDC hdc, int size, int dot_x, int dot_y, COLORREF color){//점 좌표 출력SetText(hdc, "p", dot_x, dot_y);if(size==0) //크키가 0일때SetPixel(hdc, dot_x, dot_y, color); //점 하나만 찍기else{dot_x -=size/2;dot_y -=size/2;for(int i = 0; i LPWSTR)int len = strlen(str); //문자열 길이 구하기LPWSTR lpwStr = new WCHAR[32]; //LSPWSTR 형문자열 선언size_t pont_size = mbstowcs(lpwStr, str, len+1); //유니코드 문자열로 변환//점 위에 텍스트 출력SetTextColor(hdc, RGB(255,255,255)); //글자색 설정SetBkMode(hdc,TRANSPARENT); //배경 투명하게TextOut(hdc, x, y, lpwStr, pont_size); //텍스트 출력}프로그램을 실행했을 때 나타나는 실행결과화면 캡쳐(스크린샷)