C언어 응용 제10주 실습 해보기 제8장 트리.

Slides:



Advertisements
Similar presentations
© 2012 인피니티북스 All rights reserved 제 3 장 이클립스 사용하기 Power Java.
Advertisements

시스템 프로그래밍 박진희 컴퓨터 시스템 연구실. 2 Project 3 Key-value store 유일한 Key 에 하나의 Value 를 가지고 있는 방식 - Key 와 Value 를 쌍으로 관리 - Hash table, B-Tree, B+ Tree 등 분산형 데이터베이스에서.
제 2 장 프로그램 개발과정. 통합 개발 환경  통합 개발 환경 (IDE: integrated development environment)  에디터 + 컴파일러 + 디버거.
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
스택 스택 추상자료형 스택 스택의 구현 스택의 응용 한빛미디어(주).
자료구조: CHAP 7 트리(1) 순천향대학교 컴퓨터공학과 하 상 호.
1. 자료구조 개념 (1) 자료구조의 개요 1) 자료구조 ① 일련의 자료들을 조직하고 구조화하는 것 ② 자료의 표현과 그것과 관련된 연산 2) 자료구조에 따라 저장공간의 효율성과 프로그램의 실행시간이 달라짐 3) 어떠한 자료구조에서도 필요한 모든 연산들을 처리하는 것이.
변비 재활전문센터 재활 간호사 김은화.
03장 영상처리를 위한 Visual C++ 디지털 영상 파일 포맷 MFC 응용 프로그램 마법사를 이용한 MFC 프로젝트 작성
8. 파일 인덱스: 탐색트리 (Search Tree)
C 언어 기초 2 위덕대학교 에너지전기공학부 이 수 형 2009년 2학기.
제3장 C 프로그래밍 환경.
Q & A (사실상 혼인·이혼) Q. 사실상 혼인·이혼 관계를 어떻게 처리해야 하나요?   사실 혼인·이혼은 부부 모두 동의 여부를 확인하고, 자녀, 이·통·반장으로부터 「사실(이)혼 확인서」를 징구해야 합니다. 만약 어느 한쪽이 동의하지 않는 경우는.
Internet Computing KUT Youn-Hee Han
기초C언어 제1주 강의 소개, C언어 개요, Eclipse 사용 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원
1. C 언어의 이해와 컴파일러 설치.
5장. 리스트 리스트 학습목표 목록이나 도표처럼 여러 데이터를 관리할 수 있는 자료형을 추상화
6장 트리.
공학기초설계 Youn-Hee Han 강의 소개 & MinGW & gcc 공학기초설계 Youn-Hee Han
CHAP 7:트리.
강의 #7 트리(Tree).
쉽게 배우는 알고리즘 5장. 검색트리
1 C 언어의 이해와 컴파일러 설치 프로그래밍 환경을 구축하자!.
자료구조: CHAP 7(3) 트리 순천향대학교 컴퓨터공학과 하 상 호.
자료구조: CHAP 7 이진 탐색 트리 순천향대학교 컴퓨터공학과 하 상 호.
Chapter 9 – 구조형과 리스트 처리 Outline 9.1 자신 참조 구조형 9.2 선형 연결 리스트 9.3 리스트 연산
제3장 이클립스 사용하기.
자료구조: CHAP 4 리스트 (2) 순천향대학교 컴퓨터공학과 하 상 호.
쉽게 배우는 알고리즘 5장. 검색트리.
C언어 응용 제 10 주 트리.
10장 포인터와 문자열 포인터 기본 배열과 포인터 매개변수 전달방법 포인터와 문자열.
DataScience Lab. 박사과정 김희찬 (월)
CHAP 11: 해싱 순천향대학교 하상호.
이진트리 순회 트리내의 모든 노드를 특정 순서에 따라 한번씩 방문 하는 것 방문 순서 R: Moving Right Child
12 검색.
IT CookBook, 자바로 배우는 쉬운 자료구조
CHAP 8:우선순위큐 C로 쉽게 풀어쓴 자료구조 생능출판사 2011.
Tree & Heap SANGJI University Kwangman Ko
CHAP 7:트리 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
배열과 연결리스트 연결리스트 배열 메모리 할당이 연속적이어서 인덱스 사용시 검색이 빠르다.
CHAP 7:트리 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
C언어 응용 제6주 실습 해보기 제5장.
강의 소개, 자료구조의 개념, SW 개발과 자료구조
Chapter 04 리스트.
제어문 & 반복문 C스터디 2주차.
자료구조: CHAP 4 리스트 (2) 순천향대학교 컴퓨터공학과 하 상 호.
기초C언어 제4주 실습 프로젝트 아카이브로 저장하기/가져오 기 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
C언어 응용 제7주 실습 해보기 제6장.
Lecture 8 복잡한 구조 프로그래밍 프로그램 짤 때의 마음가짐 invariant 데이터 구성 list pair
자료구조: CHAP 7(2) 트리 순천향대학교 컴퓨터공학과 하 상 호.
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
CHAP 8:우선순위큐.
C언어 응용 제 15 주 검색.
C언어 응용 제1주 실습 해보기.
CHAP 12 : 탐색.
CHAP 12 : 탐색 C로 쉽게 풀어쓴 자료구조 생능출판사 2011.
마음의 성전이 더 아름다운 조촌교회.
C언어 개론.
1.비 사업용(자가용 및 관용) 차 종 적 용 상 의 구 분 승합 자동차 (버스) 1 종
탐색 선형 탐색, 이진 탐색, 이진 탐색 트리.
제 5 장 탐색트리.
Chapter 07 트리.
대림대학교 2017년도 1학기 강의 왕보현 순서도와 스크래치 6주차 대림대학교 2017년도 1학기 강의 왕보현
자료구조 자료구조의 개요 배열 선형 리스트 스택 큐 트리.
유예 X-FILE *조사자* 1301권희원 1315이예지 1317장아정 1322홍자현.
[CPA340] Algorithms and Practice Youn-Hee Han
Eclipse를 이용한 Embedded Linux 응용 프로그램 개발
C언어 응용 제11주 실습 해보기 제9장 그래프1.
Choi Younghwan CSE HUFS
Presentation transcript:

C언어 응용 제10주 실습 해보기 제8장 트리

실습 내용 예제 8-1 이진트리 순회 프로그램 예제 8-2 가상폴더의 용량 계산 프로그램 예제 8-3 이진탐색트리의 연산 프로그램 예제 8-4 순차자료구조를 이용한 최대히프 프로 그램

예제 8-1 실습하기 연결자료구조를 이용한 이진트리 구현 이진트리 노드 생성 함수 작성 이진트리의 순회 함수 작성 이진트리를 구현한 소스파일과 헤더파일을 따로 작성한다. 구현한 함수 목록 makeBinaryTree : 이진트리 노드를 생성하는 함수 preorder : 전위 순회 함수 inorder : 전위 순회 함수 postorder : 전위 순회 함수 removeBinaryTree : 이진트리 삭제

소스 목록 및 내용 binarytree.h : 이진트리구현에 필요한 자료형과 함수의 원형을 선언하는 헤더 파일 binarytree.c : 이진트리구현에 필요한 함수의 내 용을 작성한 소스 ex0801.c : 이진트리를 테스트하는 main 소스 파 일

실습하는 순서 Eclipse 를 실행한다. Workspace와 Perspective가 맞는지 확인 하고 맞지 않으면 수정한다. Workspace 는 D:\Lec_hwlee\Capp\y2014 이고 Perspective 는 C/C++ 이어야 한다. 프로젝트 생성 binarytree.h 파일 작성 binarytree.c 파일 작성 ex0801.c 작성 빌드 및 실행 결과 확인

소스들 사이의 연관 관계 binarytree.h ex0801.c 이진트리 구현에 필요한 구조체와 필요한 함수의 원형을 선언한다. ex0801.c 구현된 연결리스트를 테스트 해보는 main 소스 포함한다. 포함한다. 실제 함수를 호출하여 사용한다. binarytree.c 이진트리 구현에 필요한 함수의 내용을 작성한다.

main 소스 코드 이진트리를 만들고 각 순회 방법으로 출력한다.

Eclipse 실행 D:\Lec_hwl\CApp\y2014

Eclipse 실행

Workspace 확인 D:\Lec_hwl\CApp\y2014

CDT Perspective 확인 이 버튼을 클릭해서 수정 Java EE 로 되어 있음

CDT Perspective 확인 C/C++ 선택

CDT Perspective 확인 C/C++ 로 되어 있음

새 프로젝트 생성 File->New->C Project 반드시 C Project를 택할 것

프로젝트 명 설정 Ch0801 Empty Project Cygwin GCC D:\Lec_hwl\capp\y2014\Ch0801

프로젝트 구성 설정 Debug 버전과 Release 버전 모두 사용

생성된 빈 프로젝트 본인 컴퓨터의 사양에 따라 내용은 약간씩 다를 수 있음

binarytree.h 추가 및 작성 Header File 선택

binarytree.h 추가 및 작성 Ch0801 프로젝트명 설정(자동설정) binarytree.h 헤더 파일 명 설정

binarytree.h 추가 및 작성 자동 생성된 빈 헤더 파일 헤더가 여러 소스에서 포함되었을 때 이중으로 포함되지 않도록 하는 매크로 실제 헤더의 내용이 들어갈 위치

binarytree.h 추가 및 작성 노드 구조체 및 함수 원형 선언

binarytree.c 추가 및 작성 Source File 선택

binarytree.c 추가 및 작성 Ch0801 프로젝트명 확인 binarytree.c 소스 파일명 설정

binarytree.c 추가 및 작성 자동 생성된 빈 소스 파일

binarytree.c 추가 및 작성 필요한 코드 작성(빈 함수 작성) 표준 입출력 함수 헤더 메모리 할당 함수 헤더 이진트리관련 함수 헤더 필요한 각 함수의 원형에 맞게 함수의 몸체를 작성하되, 내용은 모두 빈 것으로 작성한다. 차후에 한 함수씩 코드의 내용을 작성한다.

makeTreeNode() 함수 노드에 저장할 자료와 왼쪽, 오른쪽 연결 노드를 이용하여 새로운 이진트리를 구성한다.

preorder() 함수 이진 트리를 전위 순회 한다.

inorder() 함수 이진 트리를 중위 순회 한다.

postorder() 함수 이진 트리를 후위 순회 한다.

removeBinaryTree() 함수 이진 트리가 사용하는 메모리를 반환한다.

ex0801.c 추가 및 작성 Source File 선택

ex0801.c 추가 및 작성 Ch0801 프로젝트명 확인 ex0801.c 소스 파일명 설정

추가된 빈 소스 파일 프로젝트에 3 개의 파일 ex0801.c, binarytree.c, binarytree.h 가 추가된 것을 확인할 수 있다.

main 함수 작성 빈 main 함수 작성 표준 입출력 함수 헤더 메모리 관련 함수 헤더 이진트리 관련 함수 헤더

main 함수 아래 그림과 같은 이진 트리를 만들고 전위, 중위, 후위 순회 출력을 한다.

main 함수 작성

main 함수 작성

빌드 및 실행 결과

도전 문제 트리의 자료를 정수로 하는 이진트리를 만들고 앞 예제의 A=5, B=-3, C=7, D=2 로 한 수식의 결 과를 계산하는 프로그램을 완성하시오.

예제 8-2 실습하기 이진트리 형태로 구성된 폴더 구조를 구현하고 폴 더의 총 크기를 계산한다. 이진트리를 구현한 소스파일과 헤더파일을 따로 작성한다. 구현한 함수 목록 makeFolderTree : 이진트리 폴더 구조를 생성한다. removeFolderTree : 이진트리가 사용하는 메모리를 반 환한다. postorderSize : 후위 순회로 폴더의 크기를 계산한다.

소스 목록 및 내용 foldertree.h : 필요한 자료형과 함수의 원형을 선 언하는 헤더 파일 foldertree.c : 필요한 자료형과 함수의 내용을 작 성한 소스 ex0802.c : 테스트하는 main 소스 파일

예제 폴더 구조

실습하는 순서 Eclipse 를 실행한다. Workspace와 Perspective가 맞는지 확인 하고 맞지 않으면 수정한다. Workspace 는 D:\Lec_hwlee\Capp\y2014 이고 Perspective 는 C/C++ 이어야 한다. 프로젝트 생성 foldertree.h 파일 작성 foldertree.c 파일 작성 ex0802.c 작성 빌드 및 실행 결과 확인

소스들 사이의 연관 관계 foldertree.h ex0802.c 이진트리 구현에 필요한 구조체와 필요한 함수의 원형을 선언한다. ex0802.c 구현된 연결리스트를 테스트 해보는 main 소스 포함한다. 포함한다. 실제 함수를 호출하여 사용한다. foldertree.c 이진트리 구현에 필요한 함수의 내용을 작성한다.

함수 가상 코드 makeFolderTree(data, left, right) s ← memory allocate for FolderTree; if ( s = NULL) then memory full error; return NULL; else { s-> data ← data; s-> left ← left; s-> right ← right; return s; } End makeFolderTree

함수 가상 코드 removeFolderTree(FolderTree * root) if ( root = NULL) then return; else { removeFolderTree(root->left); removeFolderTree(root->right); free root; } End removeFolderTree

함수 가상 코드 postorderSize(FolderTree * root) if( root = NULL) then return 0; else { size ← 0; size ← size + postorderSize(root->left); size ← size + postorderSize(root->right); size ← size + root->size; return size; } End postorderSize

main 소스 코드 앞의 그림과 같은 구조를 갖는 이진 트리를 만든다. 전체 폴더의 크기를 구하여 출력한다.

Eclipse 실행 D:\Lec_hwl\CApp\y2014

Eclipse 실행

Workspace 확인 D:\Lec_hwl\CApp\y2014

CDT Perspective 확인 이 버튼을 클릭해서 수정 Java EE 로 되어 있음

CDT Perspective 확인 C/C++ 선택

CDT Perspective 확인 C/C++ 로 되어 있음

새 프로젝트 생성 File->New->C Project 반드시 C Project를 택할 것

프로젝트 명 설정 Ch0802 Empty Project Cygwin GCC D:\Lec_hwl\capp\y2014\Ch0802

프로젝트 구성 설정 Debug 버전과 Release 버전 모두 사용

생성된 빈 프로젝트 본인 컴퓨터의 사양에 따라 내용은 약간씩 다를 수 있음

foldertree.h 추가 및 작성 Header File 선택

foldertree.h 추가 및 작성 Ch0802 프로젝트명 설정(자동설정) foldertree.h 헤더 파일 명 설정

foldertree.h 추가 및 작성 자동 생성된 빈 헤더 파일 헤더가 여러 소스에서 포함되었을 때 이중으로 포함되지 않도록 하는 매크로 실제 헤더의 내용이 들어갈 위치

foldertree.h 추가 및 작성 노드 구조체 및 함수 원형 선언

foldertree.c 추가 및 작성 Source File 선택

foldertree.c 추가 및 작성 Ch0802 프로젝트명 확인 foldertree.c 소스 파일명 설정

foldertree.c 추가 및 작성 자동 생성된 빈 소스 파일

foldertree.c 추가 및 작성 필요한 코드 작성(빈 함수 작성) 표준 입출력 함수 헤더 메모리 할당 함수 헤더 이진트리관련 함수 헤더 필요한 각 함수의 원형에 맞게 함수의 몸체를 작성하되, 내용은 모두 빈 것으로 작성한다. 차후에 한 함수씩 코드의 내용을 작성한다.

makeFolderTree() 함수 노드에 저장할 자료와 왼쪽, 오른쪽 연결 노드를 이용하여 새로운 이진트리를 구성한다.

removeFolderTree() 함수 이진 트리가 사용하는 메모리를 반환한다.

preorderSize() 함수 이진 트리를 전위 순회하면서 크기를 계산한다.

ex0802.c 추가 및 작성 Source File 선택

ex0802.c 추가 및 작성 Ch0802 프로젝트명 확인 ex0802.c 소스 파일명 설정

추가된 빈 소스 파일 프로젝트에 3 개의 파일 ex0802.c, foldertree.c, foldertree.h 가 추가된 것을 확인할 수 있다.

main 함수 작성 빈 main 함수 작성 표준 입출력 함수 헤더 메모리 관련 함수 헤더 이진트리 관련 함수 헤더

main 함수 아래 그림과 같은 이진 트리를 만들고 후위순회를 사용하여 전체 크기를 계산하여 출력한다.

main 함수 작성

빌드 및 실행 결과

도전 문제 위 예제에서 노드의 자료에 폴더의 이름을 저장할 수 있도록 수정하고 출력할 때 노드에 저장된 이름 을 사용하도록 하시오.

예제 8-3 실습하기 이진탐색트리를 구현한다. 이진탐색트리를 사용하여 자료를 입력하고 검색하 는 프로그램을 구현한다. 구현한 함수 목록 insertNode : 이진탐색트리에 자료를 삽입한다. removeNode : 이진탐색트리로 부터 주어진 원소를 찾아 서 삭제한다. searchNode : 이진탐색트리에서 주어진 원소를 갖는 노 드를 찾는다. clearTree : 트리가 사용한 메모리를 반환한다. displayInorder : 이진탐색트리를 출력한다. menu : 메뉴를 출력하는 함수

소스 목록 및 내용 bst.h : 필요한 자료형과 함수의 원형을 선언하는 헤더 파일 bst.c : 필요한 자료형과 함수의 내용을 작성한 소 스 ex0803.c : 테스트하는 main 소스 파일

실습하는 순서 Eclipse 를 실행한다. Workspace와 Perspective가 맞는지 확인 하고 맞지 않으면 수정한다. Workspace 는 D:\Lec_hwlee\Capp\y2014 이고 Perspective 는 C/C++ 이어야 한다. 프로젝트 생성 bst.h 파일 작성 bst.c 파일 작성 ex0803.c 작성 빌드 및 실행 결과 확인

소스들 사이의 연관 관계 bst.h ex0803.c 이진탐색트리 구현에 필요한 구조체와 필요한 함수의 원형을 선언한다. 구현된 연결리스트를 테스트 해보는 main 소스 포함한다. 포함한다. 실제 함수를 호출하여 사용한다. bst.c 이진탐색트리 구현에 필요한 함수의 내용을 작성한다.

함수 가상 코드 insertNode(BSTNode *root, char data) p ← root; while ( p ≠ NULL) do { if( data = p.key) then return; q ← p; if( data < p.key) then p ← p.left; else p ← p.right; } node ← allocate memory for a new node; node.key ← data; node.left ← NULL; node.right ← NULL; if( root = NULL) root ← node; else if ( data < q.key) then q.left ← node; else q.right ← node; return root; End insertNode

함수 가상 코드 removeNode(BSTNode * root, char data) search node with the same key value; if not exist write message and return; remove that node and modify tree End removeNode

함수 가상 코드 searchNode(BSTNode * root, char data, BSTNode **parent) p ← root; if( p = NULL) then return NULL; if (p.key = data) then return p; if( data < p.key) then *parent ← p; return searchNode(p.left, data, parent); else return searchNode(p.right, data, parent); End searchNode

함수 가상 코드 clearTree(BSTNode * root) if( root ≠ NULL) then clearTree(root->left); clearTree(root->right); free(root); End clearTree

함수 가상 코드 displayInorder(BSTNode * root) if( root ≠ NULL) then displayInorder(root->left); printf(“%c_”, root->key); displayInorder(root->right); End displayInorder

main 소스 코드 이진탐색트리를 만들고 메뉴를 이용하여 삽입/삭 제/출력를 한다.

Eclipse 실행 D:\Lec_hwl\CApp\y2014

Eclipse 실행

Workspace 확인 D:\Lec_hwl\CApp\y2014

CDT Perspective 확인 이 버튼을 클릭해서 수정 Java EE 로 되어 있음

CDT Perspective 확인 C/C++ 선택

CDT Perspective 확인 C/C++ 로 되어 있음

새 프로젝트 생성 File->New->C Project 반드시 C Project를 택할 것

프로젝트 명 설정 Ch0803 Empty Project Cygwin GCC D:\Lec_hwl\capp\y2014\Ch0803

프로젝트 구성 설정 Debug 버전과 Release 버전 모두 사용

생성된 빈 프로젝트 본인 컴퓨터의 사양에 따라 내용은 약간씩 다를 수 있음

bst.h 추가 및 작성 Header File 선택

bst.h 추가 및 작성 Ch0803 프로젝트명 설정(자동설정) bst.h 헤더 파일 명 설정

bst.h 추가 및 작성 자동 생성된 빈 헤더 파일 헤더가 여러 소스에서 포함되었을 때 이중으로 포함되지 않도록 하는 매크로 헤더가 여러 소스에서 포함되었을 때 이중으로 포함되지 않도록 하는 매크로 실제 헤더의 내용이 들어갈 위치

bst.h 추가 및 작성 노드 구조체 및 함수 원형 선언

bst.c 추가 및 작성 Source File 선택

foldertree.c 추가 및 작성 Ch0803 프로젝트명 확인(자동설정) bst.c 소스 파일명 설정

bst.c 추가 및 작성 자동 생성된 빈 소스 파일

bst.c 추가 및 작성 필요한 코드 작성(빈 함수 작성) 표준 입출력 함수 헤더 메모리 할당 함수 헤더 이진트리관련 함수 헤더 필요한 각 함수의 원형에 맞게 함수의 몸체를 작성하되, 내용은 모두 빈 것으로 작성한다. 차후에 한 함수씩 코드의 내용을 작성한다.

insertNode() 함수 노드에 저장할 자료를 올바른 위치에 추가한다.

insertNode() 함수 노드에 저장할 자료를 올바른 위치에 추가한다.

removeNode() 함수 주어진 자료를 갖는 노드를 찾아서 삭제하고 트리 를 변형한다.

removeNode() 함수

removeNode() 함수

removeNode() 함수

searchNode() 함수

searchNode() 함수

clearTree() 함수

displayInorder() 함수

ex0803.c 추가 및 작성 Source File 선택

ex0803.c 추가 및 작성 Ch0803 프로젝트명 확인(자동설정) ex0803.c 소스 파일명 설정

추가된 빈 소스 파일 프로젝트에 3 개의 파일 ex0803.c, bst.c, bst.h 가 추가된 것을 확인할 수 있다.

main 함수 작성 빈 main 함수 작성 표준 입출력 함수 헤더 메모리 관련 함수 헤더 이진탐색트리 관련 함수 헤더

main 함수 작성

main 함수 작성

main 함수 작성

빌드 및 실행 결과

도전 문제 위 예제에서 노드의 자료를 정수형으로 하여 다시 작성하시오.

도전문제 예제 8-4를 위의 풀이 방법과 유사하게 작성하시 오.