2016-03-15
배열, 포인터, 동적할당, 구조체
귀납적 정의 (Inductive Definition)
리스트, 트리
kyagrd@korea.ac.kr
제목: [퀴즈0315] 이름 학번
T a[N]; // T 타입의 길이 N짜리 배열
C++의 new 문법이 훨씬 간결하므로 C++ 기준으로 설명
(C의 동적할당이 궁금하면 교과서에서 찾아볼 것)
T* p = new T;
struct MyType { T1 name1; T2 name2; ...; Tn namen };
struct list { int val; list* next; };
struct tree { int val; tree* left; tree* right; };
struct point { float x; float y; };
point p = { 1.3, 4.5 }; // 배열과 초기화와 같은 문법
p.x == 1.3
(&p)->y == 4.5
point* ptr = new point( { 1.3, 4.5 } ); // 동적 할당 + 초기화
ptr->x == 1.3
(*ptr).y == 4.5
자연수의 귀납적 정의
0 은 자연수 (base case)
n 이 자연수면 1+n 도 자연수 (inductive case)
리스트의 귀납적 정의
[] 는 리스트 (base case)
l 이 리스트면 v :: l 도 리스트 (inductive case)
nil 은 두갈래나무
t1 과 t2 가 두갈래나무라면 도 두갈래나무
t1
t2
v
(참고: 교과서에서는 recursion을
"재귀" 대신 "순환"이라 번역함)
struct list { int val; list* next };
NULL // 또는 0
// v가 int 값이고 l은 list 포인터일 때
new list( { v, l } )
NULL // 또는 0
// v가 int 값이고 t1과 t2가 tree 포인터일 때
new tree { v, t1, t2 }
정수 배열로부터 다음을 구하는 프로그램 작성
평균값(mean) -- 쉽다
중간값(median) -- 힌트는 정렬
최빈값(mode) -- 힌트는 역시 정렬