C언어 응용 제6주 실습 해보기 제5장.

Slides:



Advertisements
Similar presentations
제 2 장 프로그램 개발과정. 통합 개발 환경  통합 개발 환경 (IDE: integrated development environment)  에디터 + 컴파일러 + 디버거.
Advertisements

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++ 통합 환경 들어가기.
C언어 응용 제 6 주 연결 자료구조.
변비 재활전문센터 재활 간호사 김은화.
CHAP 1:자료구조와 알고리즘.
C 언어 기초 2 위덕대학교 에너지전기공학부 이 수 형 2009년 2학기.
C++ Espresso 제1장 기초 사항.
제3장 C 프로그래밍 환경.
Q & A (사실상 혼인·이혼) Q. 사실상 혼인·이혼 관계를 어떻게 처리해야 하나요?   사실 혼인·이혼은 부부 모두 동의 여부를 확인하고, 자녀, 이·통·반장으로부터 「사실(이)혼 확인서」를 징구해야 합니다. 만약 어느 한쪽이 동의하지 않는 경우는.
CHAP 1:자료구조와 알고리즘 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
Internet Computing KUT Youn-Hee Han
기초C언어 제1주 강의 소개, C언어 개요, Eclipse 사용 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원
제주북초등학교 6학년 심화반 장지은 지도교사 : 고동림 선생님
1. C 언어의 이해와 컴파일러 설치.
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2005
5장. 리스트 리스트 학습목표 목록이나 도표처럼 여러 데이터를 관리할 수 있는 자료형을 추상화
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
Chapter 03 배열, 구조체, 포인터.
처음으로 배우는 C 프로그래밍 제2부 기초 제5장 반복문.
Choi, Namseok Java 기초 (Java의 제어문과 배열) Choi, Namseok
1 C 언어의 이해와 컴파일러 설치 프로그래밍 환경을 구축하자!.
제 4 장 L i s t.
자료구조: CHAP 7(3) 트리 순천향대학교 컴퓨터공학과 하 상 호.
자료구조: CHAP 7 이진 탐색 트리 순천향대학교 컴퓨터공학과 하 상 호.
Chapter 9 – 구조형과 리스트 처리 Outline 9.1 자신 참조 구조형 9.2 선형 연결 리스트 9.3 리스트 연산
제3장 이클립스 사용하기.
자료구조: CHAP 4 리스트 (2) 순천향대학교 컴퓨터공학과 하 상 호.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
[INA240] Data Structures and Practice
C언어 응용 제 10 주 트리.
Java IT응용시스템공학과 김형진 교수 2장. 자바의 환경 public class SumTest {
DataScience Lab. 박사과정 김희찬 (월)
CHAP 1:자료구조와 알고리즘 C로 쉽게 풀어쓴 자료구조 생능출판사 Slide 1 (of 28)
제 3 장 상수와 변수
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
IT CookBook, 자바로 배우는 쉬운 자료구조
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
배열과 연결리스트 연결리스트 배열 메모리 할당이 연속적이어서 인덱스 사용시 검색이 빠르다.
DataScience Lab. 박사과정 김희찬 (월)
C언어 응용 제10주 실습 해보기 제8장 트리.
OpenCV 설치 및 구성 OpenCV
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
WAP Java Seminar
강의 소개, 자료구조의 개념, SW 개발과 자료구조
다음 주 과제 3장 읽어오기 숙제 해서 제출하기. 자료구조와 알고리즘, 순환 E304호,
* 프로그램을 간단히 하기 위해 malloc 성공체크는 안 함
Chapter 04 리스트.
제어문 & 반복문 C스터디 2주차.
자료구조: CHAP 4 리스트 (2) 순천향대학교 컴퓨터공학과 하 상 호.
CHAP 2:순환.
산성과 염기성이 식물에게 미치는 영향 한림초등학교 영재 6학년 5반 송명훈.
기초C언어 제4주 실습 프로젝트 아카이브로 저장하기/가져오 기 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
C언어 응용 제7주 실습 해보기 제6장.
자료구조: CHAP 7(2) 트리 순천향대학교 컴퓨터공학과 하 상 호.
자바 5.0 프로그래밍.
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
C언어 응용 제1주 실습 해보기.
마음의 성전이 더 아름다운 조촌교회.
C언어 개론.
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
1.비 사업용(자가용 및 관용) 차 종 적 용 상 의 구 분 승합 자동차 (버스) 1 종
제주북초등학교 6학년 심화반 장지은 지도교사 : 고동림 선생님
성경퀴즈 여호수아1장 3장 복습게임.
대림대학교 2017년도 1학기 강의 왕보현 순서도와 스크래치 6주차 대림대학교 2017년도 1학기 강의 왕보현
어서와 C언어는 처음이지 제16장.
유예 X-FILE *조사자* 1301권희원 1315이예지 1317장아정 1322홍자현.
Eclipse를 이용한 Embedded Linux 응용 프로그램 개발
C언어 응용 제11주 실습 해보기 제9장 그래프1.
Choi Younghwan CSE HUFS
배열.
Presentation transcript:

C언어 응용 제6주 실습 해보기 제5장

예제 5-1 실습하기 단순연결 리스트 구현 단순 연결리스트를 구현하고 이와 연관된 함수를 구현 한다. 단순연결리스트를 구현한 소스파일과 헤더파일을 따 로 작성한다. 구현한 함수 목록 createLinkedList_H : 단순연결리스트 생성 freeLinkedList : 단순연결 리스트가 사용하는 메모리 반환 addLastNode : 마지막 노드에 노드 추가 reverse : 리스트의 순서를 역순으로 바꾼다. deleteLastNode : 마지막 노드를 삭제 한다. printList : 연결리스의 내용을 출력한다.

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

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

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

필요한 구조체 노드 구초체 요일을 저장할 것이므로 자료필드는 문자열을 저장할 수 있는 문자배열을 사용한다. 요일을 저장할 것이므로 자료필드는 문자열을 저장할 수 있는 문자배열을 사용한다. 링크 필드는 다음 노드의 주소를 저장하는 노드 구조체 포인터 변수를 사용한다.

필요한 구조체 노드 헤드 구조체 노드의 시작 구조체의 주소를 저장할 노드 구조체 포인터 변수를 멤버로 가지는 구조체이다.

필요한 함수 리턴 타입 함수명 매개변수 기능 LinkeList_H * createLinkedList_H void 새로운 단순 연결 리스트를 생성한다 freeLinkedList LinkedList_H * 해당하는 연결리스를 메모리에서 삭제한다. addLastNode LinkedList_H *, char * 주어진 문자열을 데이터로 갖는 노드를 마지막에 추가한다. reverse 연결리스트의 순서를 뒤집는다. deleteLastNode 마지막 노드를 삭제한다. printList 연결 리스트를 출력한다.

함수 가상 코드 createLinkedList_H() L ← allocate memory for LinkedList_H; return L; End createLinkedList_H

함수 가상 코드 freeLinkedList(LinkedList_H *L) while (L.head ≠ NULL) do { p ← L.head; L.head ← L.head.link; free(p); p ← NULL; } End freeLinkedList

함수 가상 코드 addLastNode(LinkedList_H *L, char *data) node ← allocate memory for ListNode; node.data ← data; if (L.head = NULL) then { L.head ← node; return; } p ← L.head; while (p.link ≠ NULL) do { p ← p.link; p.link ← node; End addLastNode

함수 가상 코드 reverse(LinkedList_H *L) p ← L.head; q ← NULL; r ← NULL; while (p ≠ NULL) do { r ← q; q ← p; p ← p.link; q.link ← r; } L.head ← q; End reverse

함수 가상 코드 deleteLastNode(LinkedList_H *L) if (L.head = NULL) then { rerurn; } if (L.head.link = NULL) then { free(L.head); L.head ← NULL; return; else { previous ← L.head; current ← L.head.link; while (current.link ≠ NULL) do { previous ← current; current ← current.link; free(current); previous.link ← NULL; End deleteLastNode

함수 가상 코드 printList(LinkedList_H *L) write “L=(“; p ← L.head; while (p ≠ NULL) do { write p.data +”->”; p ← p.link; } write “) \n”; End printList

main 소스 코드 연결 리스트를 만들고 구현한 함수들이 정상 동작 하는지를 테스트하는 코드를 작성한다.

main 의 가상 코드 L ← createLinkedList(); write message printList(L); addLastNode(L, “월”); addLastNode(L, “수”); addLastNode(L, “금”); addLastNode(L, “일”);

main 의 가상 코드 deleteLastNode(); write message printList(L); reverse(L); freeLinkedList(L); free(L);

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를 택할 것

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

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

생성된 빈 프로젝트

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

linkedlist.h 추가 및 작성 linkedlist.h 헤더 파일 명 설정

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

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

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

linkedlist.c 추가 및 작성 linkedlist.c 소스 파일명 설정

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

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

createLinkedList_H()

freeLinkedList()

addLastNode()

reverse()

deleteLastNode()

printList()

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

ex0501.c 추가 및 작성 ex0501.c 소스 파일명 설정

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

main 함수 작성 빈 main 함수 작성 표준 입출력 함수 헤더 연결리스트 관련 구조체 및 함수 헤더

main 함수 작성

main 함수 작성

main 함수 작성

빌드 및 실행 결과

도전 문제 연결 리스트의 맨 앞에 노드를 삽입하는 함수 insertNode(LinkedList_H * L, char * data); 를 추가하고 이를 테스트 할 수 있도록 main 함수를 수정하시오.

예제 5-2 실습하기 단순연결 리스트를 이용하여 다항식을 표현하고 계산한다. 단순연결 리스트를 이용하여 다항식을 표현하고 계산한다. 단순연결리스트를 구현한 소스파일과 헤더파일을 따로 작성한다. 구현한 함수 목록 createLinkedList_H : 단순연결리스트 생성 freeLinkedList : 단순연결 리스트가 사용하는 메모리 반 환 addLastNode : 마지막 노드에 노드 추가 addPoly : 두 다항식을 더한다. printPoly : 다항식을 출력한다.

소스 목록 및 내용 polylist.h : 다항식을 표현할 연결리스트 구현에 필요한 자료형과 함수의 원형을 선언하는 헤더 파 일 polylist.c : 연결리스트 구현에 필요한 함수의 내 용을 작성한 소스 ex0502.c : 다항식을 테스트하는 main 소스 파일

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

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

필요한 구조체 노드 구초체 다항식의 계수와 지수를 저장할 것이므로 자료필드는 두 개의 정수 변수를 사용한다. 링크 필드는 다음 노드의 주소를 저장하는 노드 구조체 포인터 변수를 사용한다. − 𝑥 5 +3 𝑥 2 +2

필요한 구조체 노드 헤드 구조체 노드의 시작 구조체의 주소를 저장할 노드 구조체 포인터 변수를 멤버로 가지는 구조체이다.

필요한 함수 리턴 타입 함수명 매개변수 기능 PolyNode_H * createLinkedList_H void 새로운 단순 연결 리스트를 생성한다 freeLinkedList 해당하는 연결리스를 메모리에서 삭제한다. addLastNode PolyNode_H *, int , int 주어진 문자열을 데이터로 갖는 노드를 마지막에 추가한다. addPoly PolyNode_H *, PolyNode_H *, PolyNode_H * 두 다항식을 더한다. printPoly 다항식을 출력한다.

함수 가상 코드 createLinkedList_H() L ← allocate memory for PolyNode_H; return L; End createLinkedList_H

함수 가상 코드 freeLinkedList(PolyNode_H *L) while (L.head ≠ NULL) do { p ← L.head; L.head ← L.head.link; free(p); p ← NULL; } End freeLinkedList

함수 가상 코드 addLastNode(PolyNode_H *L, int c, int e) node ← allocate memory for PolyNode; node.coef ← c; node.expo ← e; if (L.head = NULL) then { L.head ← node; return; } p ← L.head; while (p.link ≠ NULL) do { p ← p.link; p.link ← node; End addLastNode

함수 가상 코드 addPoly(PolyNode_H *p1h, PolyNode_H *p2h, PolyNode_H *p3h) p1 ← p1h.head; p2 ← p2h.head; while( p1 ≠ NULL && p2 ≠ NULL) do { if (p1.expo = p2.expo) then { sum ← p1.coeff + p2.coeff; addLastNode(p3, sum, p1->expo); p1 ← p1.link; p2 ← p2.link; } else if (p1.expo > p2.expo ) then { addLastNode(p3, p1.coeff, p1.expo); p1 ← p1.link; else { addLastNode(p3, p2.coeff, p2.expo); p2 ← p2.link; while (p1 ≠ NULL) do { while (p2 ≠ NULL) do { p2← p2.link; End addLastNode

함수 가상 코드 printPoly(PolyNode_H *L) p ← L.head; while (p ≠ NULL) do { write p.coef, p.expo; p ← p.link; } End printPoly

main 소스 코드 연결 리스트를 만들고 구현한 함수들이 정상 동작 하는지를 테스트하는 코드를 작성한다.

main 의 가상 코드 p1 ← createLinkedList(); p2 ← createLinkedList(); p3 ← createLinkedList(); addLastNode(p1, 4, 3); addLastNode(p1, 3, 2); addLastNode(p1, 5, 1); write message printPoly(p1);

main 의 가상 코드 addLastNode(p2, 3, 4); addLastNode(p2, 1, 3); addLastNode(p2, 2, 1); addLastNode(p2, 1, 0); write message printPoly(p2); addPoly(p1, p2, p3); printList(p3); free(L);

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를 택할 것

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

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

생성된 빈 프로젝트

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

linkedlist.h 추가 및 작성 polylist.h 헤더 파일 명 설정

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

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

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

polylist.c 추가 및 작성 polylist.c 소스 파일명 설정

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

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

createLinkedList_H()

freeLinkedList()

addLastNode()

addPoly() 연결된 한 파일

printPoly()

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

ex0501.c 추가 및 작성 ex0502.c 소스 파일명 설정

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

main 함수 작성 표준 입출력 함수 헤더 빈 main 함수 작성 메모리 해제 함수 헤더 연결리스트 관련 구조체 및 함수 헤더

main 함수 작성

main 함수 작성

빌드 및 실행 결과

도전 문제 두 다항식을 곱하는 함수 multiPoly(PolyNode_H *p1h, PolyNode_H *p2h, PolyNode_H *p3h) 를 구현하고 결과를 테스트 하는 프로그램을 작성하 시오. 사용자가 다항식의 계수와 차수를 입력하도록 하 고 받아들인 다항식을 출력하는 프로그램을 작성 하시오.