PowerPoint Template

Similar documents
<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

11장 포인터

슬라이드 1

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

PowerPoint 프레젠테이션

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - chap06-2pointer.ppt

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Lab 3. 실습문제 (Single linked list)_해답.hwp


Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Microsoft PowerPoint - chap11-포인터의활용.pptx

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

윤성우의 열혈 TCP/IP 소켓 프로그래밍

설계란 무엇인가?

슬라이드 1

금오공대 컴퓨터공학전공 강의자료

11장 포인터

기초컴퓨터프로그래밍

Microsoft PowerPoint - ch07 - 포인터 pm0415

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

02장.배열과 클래스

슬라이드 1

금오공대 컴퓨터공학전공 강의자료

KNK_C_05_Pointers_Arrays_structures_summary_v02

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

PowerPoint Template

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

Chapter 4. LISTS

K&R2 Reference Manual 번역본

PowerPoint 프레젠테이션

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를

설계란 무엇인가?

03_queue

chap 5: Trees

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - 제11장 포인터(강의)

ABC 10장

06장.리스트

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

Microsoft PowerPoint - chap10-함수의활용.pptx

Frama-C/JESSIS 사용법 소개

Microsoft PowerPoint - 제11장 포인터

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - Chapter14_17.pptx

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - Lesson14.pptx

Microsoft PowerPoint - Lesson14.pptx

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

11장 포인터

Chapter 4. LISTS

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint - 제3장-배열.pptx

01_List

Microsoft PowerPoint - ch08 - 구조체 (structure) am0845

슬라이드 1

Chapter 4. LISTS

중간고사 (자료 구조)

리스트 (list), 선형리스트 (linear list): 순서를가진항목들의모임 집합 : 항목간의순서의개념이없음 L = n ( item0, item1,..., item -1) l 리스트의예 l 요일 : ( 일요일, 월요일,, 토요일 ) l 한글자음의모임 : ( ㄱ, ㄴ

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

Lab 5. 실습문제 (Double linked list)-1_해답.hwp

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

Microsoft PowerPoint - chap-11.pptx

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - Chapter_09.pptx

untitled

1장. 리스트

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap08-1 [호환 모드]

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

C 언어 강의노트

Microsoft PowerPoint - Chapter_08.pptx

Microsoft PowerPoint - chap09-1.ppt

PowerPoint 프레젠테이션

Infinity(∞) Strategy

OCW_C언어 기초

BMP 파일 처리

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Contents v 학습목표 자료구조큐에대한개념을스택과비교하여이해한다. 큐의특징과연산방법에대해알아본다. 순차표현방법을이용한큐와연결표현방법을이용한큐를구현해본다. 큐의응용방법을알아본다. v 내용 큐 큐의구현 큐의응용 2/74

1장. 유닉스 시스템 프로그래밍 개요

Microsoft PowerPoint - chap06-5 [호환 모드]

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - Perpect C 02.ppt [호환 모드]

Microsoft PowerPoint - ch 전처리기, 다중 소스파일 pm1015

PowerPoint Presentation

<4D F736F F F696E74202D20C1A637C0E52DB0EDB1DEBFACB0E1B8AEBDBAC6AE2E >

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Microsoft PowerPoint - 자료구조2008Chap06

OCW_C언어 기초

Transcription:

18 동적할당과고급처리 인터넷정보과 1

2/19 동적할당 목적 다음과같은일반변수의선언과사용은변수를정적 (static) 으로사용 int a = 10; 메모리사용예측이부정확한경우는충분한메모리를미리확보해야하는것은비효율 동적 (dynamic) 메모리할당 (Memory Allocation) 동적인메모리할당을위해서는함수 malloc() 을이용, 메모리공간을확보 함수 malloc() 은 stdlib.h 헤더파일에다음함수원형으로정의 함수 malloc() 은인자로메모리할당의크기를지정하고, 반환값으로할당된메모리의시작주소를반환 반환값의유형은모든자료형의포인터로이용할수있는 void *

함수 malloc() 정수형 int 의메모리공간을함수 malloc() 을이용하여동적으로할당하는소스 확보된공간의주소는 int * 의변수에저장하여간접연산자 *pi 를이용하여원하는값을저장 다음은위문장으로메모리에 4 바이트가할당된모습 3/19 Check! 중간점검 1

메모리해제 함수 malloc() 에의하여동적으로할당된메모리공간은더이상필요가없거나, 프로그램을종료하는경우에반드시메모리를해제 함수 free() 는 stdlib.h 헤더파일에다음함수원형으로정의 void free(void *) 함수 malloc() 의반환주소를저장한변수 pi 를해제하려면다음과같이기술 free(pi); 함수 free() 는인자로해제할메모리공간의주소값을갖는포인터를이용하여호출 함수 free(pi) 가호출되어성공적으로메모리가해제되면변수 pi 는 NULL 값을가지며더이상 4 바이트의공간은사용불가능 4/19

배열과같은메모리할당 자료형 int 배열과같이 int 형메모리공간을한번에여러개동적으로확보 int *ary; ary = (int *) malloc( sizeof(int)*3 ); 함수 malloc() 이반환하는값은포인터인 int * 의변수로저장하고, malloc() 의인자는 sizeof(int) * ( 확보하려는배열의원소의개수 ) 로지정 메모리공간이성공적으로확보되면변수 ary 를이용하여다음과같이배열을이용 ary[0] = 10; ary[1] = 11; ary[2] = 12; 위문장이실행된이후의메모리의모습은다음 확보하여이용하던배열도사용할필요가없으면함수 free() 를이용, 해제 free(ary); 5/19 프로그램실행중에동적으로확보된메모리는프로그램이종료되기전에반드시해제

함수 calloc() 함수 calloc() 은메모리공간을확보하면서초기값을 0 으로저장 인자 함수 malloc() 은메모리공간을확보하고그장소에초기값을저장하지않음 함수 calloc() 은함수원형이 stdlib.h 헤더파일에정의 함수 calloc() 에서앞의인자는배열의개수, 뒤의인자는한원소의크기 int *ary; ary = (int *) calloc( 3, sizeof(int) ); 함수 calloc() 을위와같이사용하면변수 ary 는 int 형원소 3 개를확보한저장공간을기본값 0 으로저장 6/19

함수 realloc() 함수 realloc() 은이미확보한저장공간을새로운크기로변경 void * realloc(void *, size_t); 인자 함수 realloc() 의첫번째인자는변경할저장공간의주소이며, 두번째인자는변경하고싶은저장공간의크기 함수 realloc() 에서첫번째인자가 NULL이면함수 malloc() 과같은기능을수행, 즉지정된크기만큼의새로운공간을할당 int *reary, *cary; cary = (int *) calloc( 3, sizeof(int) ); 7/19 Check! 중간점검 2,3

자기참조구조체 구조체정의 자기참조구조체 struct selfref { int n; struct selfref *next; }; 자기참조구조체란구조체의멤버변수중의하나가자기자신의구조체포인터변수를갖는특수한중첩된구조체 멤버 next 의자료형을포인터가아닌 struct selfref 로한다면컴파일시간에에러발생 구조체정의구문에서아래와같이자기자신구조체유형멤버는허용하지않음 struct selfref { int n; struct selfref next; }; 8/19

9/19 리스트 링크트리스트 ( 연결리스트 : Linked List) 자기참조구조체는반드시구조체의멤버변수중의하나가자기자신의구조체포인터변수이어야함 자기참조구조체는동일구조체의표현을여러개만들어연결할수있는기능이가능 이러한구조를연결리스트 (Linked List) 라함 간단히두개의구조체를연결하는방법 우선구조체 struct selfref 를하나의자료형인 list 형으로 정의 typedef struct selfref list; 자료형 list 포인터형인 first 와 second 를선언 list *first = NULL, *second = NULL;

10/19 연결리스트만들기 두구조체포인터변수에함수 malloc() 을이용하여구조체의멤버를저장할수있는저장공간을할당 first = (list *) malloc( sizeof(list) ); second = (list *) malloc( sizeof(list) ); 두구조체에 first, second 에각각정수 100, 200 을저장하고, 구조체 second 의멤버 next 에는 NULL 을저장 first->n = 100; second->n = 200; second->next = NULL; 다음은위문장이실행된이후의메모리그림 구조체 first 의멤버 next 에는아직아무값도저장하지않은상태

연결리스트만들기 위그림으로는아직구조체 first 와 second 는아무관련이없음 만일구조체 first 가다음 second 구조체를가리킨다는의미의코딩을원한다면다음문장이필요 first->next = second; 즉구조체 first 의멤버 next 에구조체 second 의주소값을저장 다음은이문장이실행된후의메모리모습 11/19 이러한자기참조구조체의표현은프로그램에서자주이용되는자료구조로프로그램에서는매우중요한구조

연결리스트 프로그램언어 C, C++, Java 를개발된순서로나열해보자. 이러한표현에서가장많이이용하는방법중의하나가다음과같은표형태 1 C 2 C++ 3 Java 12/19 이러한순차적 (sequential) 자료에가장적합한메모리의구조 위와같이순차적자료항목을표현하는가장쉬운방법은배열 자기참조구조체를이용한연결리스트 (Linked List) 구조도순차적자료에적합 위그림이위자료를연결리스트로표현한그림 각각의사각형은한항목의자료를표현하는것으로노드 (node), 항목 (item) 또는원소 (element) 라부름 헤드 (head) 포인터는연결리스트의처음노드를가리키는포인터 연결리스트의가장큰장점 연결리스트항목의수를프로그램내부에서메모리가허용하는한늘릴수있다는것

13/19 노드구조체 연결리스트를구현하려면자기참조구조체를이용 연결리스트의헤드포인터는연결리스트의첫번째원소를가리키며, 각각의원소는자기다음의원소를가리킴 연결리스트의마지막원소는 NULL 값을가지고있어마지막원소임을알수있음 위의자료를표현하는구조체 struct linked_list 를정의 구조체 struct linked_list 의멤버로는 문자열을저장할 char * 변수인 name, 그리고다른구조체를가리킬포인터 next 로구성 문장 typedef 를이용하여 struct linked_list 를간단히 NODE 로정의하고, 이 NODE 의포인터를 LINK 로정의 struct linked_list { char *name; struct linked_list *next; }; typedef struct linked_list typedef NODE * NODE; LINK;

구조체노드생성 구조체 NODE 에 Java 문자열을저장하는모듈 우선새로생성할노드의주소를저장할변수 cur 를선언 LINK cur; char str[] = Java ; cur = (NODE *) malloc(sizeof(node)); if (cur == NULL) { printf(" 노드생성을위한메모리할당에문제가있습니다.\n"); return NULL; } 변수 cur 가가리키는구조체의멤버 name 은문자포인터 이 cur->name 에저장할문자의수만큼메모리를할당 cur->name = (char *) malloc(sizeof(char)*(strlen(str)+1)); 함수 strcpy() 를이용하여 Java 가저장된문자열 str 을 cur->name 에복사 strcpy(cur->name, str); 14/19 현재생성된노드의멤버 cur->next에는초기에 NULL을입력한후, 필요하면나중에다른구조체를가리키도록대입 cur ->next = NULL; Check! linkedlist.c

#if 와 #elif C 언어의조건문과같은전처리기지시자 #if 와 #elif 를제공 #if 다음에는괄호가없이상수수식이오며, 관계연산자나논리연산자를이용가능 #if 는다음수식의결과가 0 이아니면참으로인식 #if SYSTEM == WINDOWS #include "stdio.h" #endif #if 는조건식이참이면 #endif 가나올때까지사이의문장을실행 #if 는다음과같이 #elif 와 #else 도제공 #if SYSTEM == WINDOWS #include "stdio.h" #elif SYSTEM == MAC #include "vax.h" #elif SYSTEM == UNIX #include "unix.h" #else #include "etc.h" #endif 15/19

16/19 #ifdef #ifdef 는다음에나오는기호상수가정의되어있으면 #endif 까지의문장을실행하고, 그렇지않으면소스에서제거 #ifdef 는반드시 #endif 로종료해야 #define DEBUG #ifdef DEBUG if (i%5 == 0) printf("debug : 1 부터 %d 까지의곱은 %d 입니다.\n", i, prod); #endif 위문장은기호상수 DEBUG 가정의되어있으므로 #ifdef 내부의 if 조건문을포함하여컴파일을실행 만일 #define DEBUG 문장이없다면 #ifdef 내부의 if 조건문은소스에서제거되므로컴파일에참여할수없고, 당연히실행해도그부분은실행되지않음

#ifndef #ifndef 는 #ifdef 와반대 #ifndef 기호상수가정의되어있지않으면 #endif 까지의문장을전처리기에서실행하고, 기호상수가정의되어있으면전처리기에서실행하지않고소스에서제거 #ifndef 도반드시 #endif 로종료 #ifndef LIMIT #define LIMIT 20 #endif 17/19

18/19 프로그래밍실습 프로그램목적 주어진문자열을배열에저장하고, 이배열을알파벳문자순서로나열하는프로그램 파일 내용 sort.c 함수 main() 을구현한소스 조건 sortlib.c sort.h 함수 sort(), prtarray(), swap() 을구현한소스 이프로그램에서필요한헤더파일과열거형, 함수원형을정의한헤더파일 10 개의문자열을 char *pl[10] 에선언 ("cobol", "pascal", "java", "c#", "c", "c++", "smalltalk", "basic", "fortran", "b") 을저장 문자열순서가작은것부터나열하는오름차순과그반대인내림차순으로정렬 함수는 main() 과함수 sort(), prtarray(), swap() 으로구성

프로그램 : 프로그래밍수정실습 P 669 예제 listlib.c 에리스트의맨처음에노드를끼워넣는 insert(link head, LINK cur) 추가하여 listlib2.c 로저장하기 deletenode(link prev, LINK cur) 추가하기 19/19