Lecture 7 복잡한 구조 프로그래밍 프로그램 짤 때의 마음가짐 invariant list set

Slides:



Advertisements
Similar presentations
폭력. 폭력이란 무엇인가 우상의 눈물 물리적인 폭력 ( 최기표 ) VS 지능적인 폭력 ( 임형우, 담임선생님 )
Advertisements

7 월 소식지에서는 도서관 분류에 대해 알아보았어요. 한국십진분류법은 0 에서 9 까지 열 개의 수를 가지고 이 세상 의 모든 것을 나누는 방법이라는 것. 이 세상의 모든 것이 이 열 개 가운데 어딘가에 꼭 들어가 야 한 다는 것 그럼,
1 박 2 일 !!! 인천마장초등학교 유수아. 1 박 2 일 멤버 인기순 위 1 위 이승기 2 위 엄태웅 3 위 은지원 4 위 김종민, 이수근 ※인터넷에서 본것이기 때문에 사람에따라 서 다를 수 있다. ※
스택 스택 추상자료형 스택 스택의 구현 스택의 응용 한빛미디어(주).
석관중앙교회 5남전도회 석 관 중 앙 교 회 회원 소식 통권 05-04호 발행일 : 2005년 04월 회 장 : 장진호 집사
지역사회복지론 1조. 요양보호시설에 대해서 황성국 임재형 이동영
8. 파일 인덱스: 탐색트리 (Search Tree)
3 장 stack and queue.
Internet Computing KUT Youn-Hee Han
I 문학의 개념과 역할 1. 문학의 개념 (1) 언어 예술로서의 문학 (2) 소통 활동으로서의 문학
2017년 1/4분기 상1동 주민자치센터프로그램 수강생 모집【선착순】
꼼꼼한 청소법 생활의 지혜.
4. 목적론적 윤리와 의무론적 윤리 01. 경험주의와 이성주의 01. 경험주의와 이성주의 02. 결과론적 윤리와 공리주의
쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express Slide 1 (of 25)
제 8 장  파서 생성기 YACC 사용하기.
CHAP 6:큐 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
5장. 리스트 리스트 학습목표 목록이나 도표처럼 여러 데이터를 관리할 수 있는 자료형을 추상화
Internet Computing KUT Youn-Hee Han
Internet Computing KUT Youn-Hee Han
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
제5장 트리.
연결리스트 (Linked List) 충북대학교 컴퓨터공학과 서 영 훈.
CHAP 7:트리.
강의 #7 트리(Tree).
제 4 장 L i s t.
스택(stack) SANGJI University Kwangman Ko
자료구조: CHAP 7(3) 트리 순천향대학교 컴퓨터공학과 하 상 호.
head data link data link data link NULL a b c
HW#2 #1과 동일한 방법으로 argc와 argv를 사용함
강의 #6 큐(Queue).
CHAP 6:큐 C로 쉽게 풀어쓴 자료구조 Slide 1 (of 27).
CHAP 6:큐 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
다음 주 과제 7장 읽어오기 숙제 해서 다음 주(11월 12일) 제출하기. 큐(Queue) E304호,
Chapter 9 – 구조형과 리스트 처리 Outline 9.1 자신 참조 구조형 9.2 선형 연결 리스트 9.3 리스트 연산
자료구조: CHAP 4 리스트 (2) 순천향대학교 컴퓨터공학과 하 상 호.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 03. 클래스의 기본.
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
C언어 응용 제 10 주 트리.
Chapter 05. 클래스 완성. chapter 05. 클래스 완성 01. 복사 생성자 복사 생성(Copy Construction) 생성될 때 자신과 같은 타입의 객체를 변수로 받아, 이 객체와 같은 값을 갖는 새로운 객체를 생성하는 것 명시적인 생성 과정뿐만.
효율적인 포인터 오류 검증 이욱세 한양대학교 컴퓨터공학과
스택(Stack) 김진수
CHAP 7:트리 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
배열과 연결리스트 연결리스트 배열 메모리 할당이 연속적이어서 인덱스 사용시 검색이 빠르다.
개항기 조선과 동아시아 박 범 한국역사입문Ⅱ.
CHAP 7:트리 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
Chapter 04 리스트.
호암초등학교 박대현 선생님의 음악 수업 안내.
자료구조: CHAP 4 리스트 (2) 순천향대학교 컴퓨터공학과 하 상 호.
Lecture 8 복잡한 구조 프로그래밍 프로그램 짤 때의 마음가짐 invariant 데이터 구성 list pair
대구의 부도심 대구의 주요축 동대구 부도심 4조 강민석 / 박성균 / 최은지/ 황재현/김예지.
CHAP 8:우선순위큐.
남아메리카 선교 김수정, 이하정 전희진, 장성경.
C 코드최적화 세명대학교 AI연구실 양승조.
CHAP 12 : 탐색.
자료구조 (Data Structure).
사도행전 13장 22절 말씀 –아멘 다 윗 을 왕 으 로 세 우 시 고 증 언 하 여 이 르 시 되 내 가 이 새 의 아 들
법인과 개인의 조세 (법인세, 소득세, 부가가치세)
강의 #11 탐색(Search).
제2장 관세법 일반 제1절 통칙 제2절 법 해석의 원칙 등 제3절 기한과 기간 제4절 서류의 송달 등
경찰행정과 세미나 결과를 공개해야한다. VS 비공개로 해야한다. 경찰의 근무성적평정 제도.
전류는 자계에서 힘을 받는다 기계공학교육 박지훈 황인석 한만혁 이덕균.
Chapter 07 트리.
argc, argv 의 사용방법 #include <stdio.h>
房思琪的初恋乐园 ‘팡쓰치’로 보는 문학의 힘 정은비.
박 현 미 울산여자상업고등학교 창업포스터 만들며 포토샵과 친해지기 박 현 미 울산여자상업고등학교.
List, ArrayList, Vector, LinkedList 가 있습니다
List, ArrayList, Vector, LinkedList 가 있습니다
Presentation transcript:

Lecture 7 복잡한 구조 프로그래밍 프로그램 짤 때의 마음가짐 invariant list set value-oriented vs. object-oriented

List ., 1-., 1-2-., 1-2-3-4-., 모든 List 는 . 이거나

정수 List를 C로 구현 typedef struct {int v; node *next;} node; typedef node* list; list Null = 0; list link(int x; list l) { node *n; n = (node *)malloc(sizeof(node)); n->v = x; n->next = l; return n; } “리스트는 . 이거나” “있는 리스트에 하나 덧 붙인것”

List 만들기 link(1,Null); link(1,link(2,Null)); link(1,link(2,link(3,Null)));

List 사용하기 int head(list l) { if (isNull(l)) { printf(“no head of empty list.”); exit(1); } else return l->v; list rest(list l) { printf(“no rest of empty list.”); else return l->next;

List 주무르기 두개의 list를 붙이기 list append(list l1, list l2) { … } list를 뒤집기 list reverse(list l) {…} list의 원소들을 모두 합하기 int sum(list l) {…} list에서 원하는 원소만 가지고 list만들기 list filter(list l) {…}

프로그램 짤 때의 마음가짐 있는 것을 변화시키는 것으로? object-oriented imperative 있는 것은 변하지 않도록? value-oriented applicative

싱거운 질문들 a = 1; b = 2; c = a + b; d = a + b; 1. c의 3이 d의 3과 같은가? 2. a를 바꾸면 c도 바뀔까? 3. d를 바꾸면 c도 바뀔까? 4. e = c 를 수행하면 c를 복사해야하나? 5. c갖고 일 봤으면, 그 3을 없애도 되나?

아직도 싱거울까? a = link(1,link(2,Null)); b = link(4,link(5,Null)); 정수보다는 복잡한(컴퓨터에 구현할 때 하는일이 많은) 경우 a = link(1,link(2,Null)); b = link(4,link(5,Null)); c = append(a,b); d = append(a,b); 1. c의 리스트가 d의 리스트와 같은가? 2. a를 바꾸면 c도 바뀔까? 3. d를 바꾸면 c도 바뀔까? 4. e = c 를 수행하면 c를 복사해야하나? 5. c갖고 일 봤으면, 그 리스트를 없애도 되나?

물건 object vs value 값 물건 값 mutable, changing 반응이 물건에서 일어나므로, 물건의 상태를 항상 고려하면 ok 값 immutable, unchanging 값은 변하지 않으므로 값만 알면 ok

list append(list l1, list l2) 물건이 변하게: append(list l1, list l2)는 list 물건 l1이 변해서 l2를 뒤에 매단것이되고 그렇게 변한 l1이 결과가 된다. 값으로서 변하지 않게: list 값들을 변화시키지 않고 l1과 l2가 붙어진 리스트를 뜻하는 새로운 리스트가 결과가 된다.

list를 물건으로 생각하기 list append(list l1, list l2) { if (isNull(l1)) {return l2;} else if (isNull(l2)) {return l1;} else if (isNull(rest(l1)) { l1->next = l2; return l1; } else {append(rest(l1),l2); return l1;} list를 물건으로 생각하기

list를 값으로 생각하기 list append(list l1, list l2) { if (isNull(l1)) {return l2;} else if (isNull(l2)) {return l1;} else if (isNull(rest(l1))) { return link(l1->v, append(rest(l1),l2) ); } list를 값으로 생각하기