쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)

Slides:



Advertisements
Similar presentations
1 구조체 윤 홍 란 컴퓨터 프로그래밍 2 구조체 정의  구조체란 ? o 서로 다른 형의 변수들을 하나로 묶어주는 mechanism. (cf. 배열 : 같은 형의 변수들을 하나로 묶어주는 mechanism) o 예 : 카드의.
Advertisements

C 언어 (STS ) 10. Pointer Applications.
Linux/UNIX Programming APUE (The Environment of a UNIX Process)
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
제14장 동적 메모리.
C 프로그래밍 I.
Chapter 04. 연결 리스트(Linked List) 2
[INA240] Data Structures and Practice
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2011
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2005
연결리스트(linked list).
제 9 장 구조체와 공용체.
제 2 장 배열과 스트링.
Linked List 학기 SANGJI University.
-Part2- 제3장 포인터란 무엇인가.
11장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
Chapter 03 배열, 구조체, 포인터.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2005
자료 구조: Chapter 3 (2)구조체, 포인터
개정판 누구나 즐기는 C언어 콘서트 제9장 포인터 출처: pixabay.
CHAP 3:배열, 구조체, 포인터.
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
head data link data link data link NULL a b c
자료 구조: Chapter 3 (2)구조체, 포인터
10장 메모리 관리.
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
Chapter 10 Pointer Applications.
25장. 메모리 관리와 동적 할당.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
P150 문제를 프로그래밍 할 것 Source file (헤더파일포함), 실행화면 (학번_이름_1.txt)
C 프로그래밍.
Dynamic Memory and Linked List
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
Chapter 2:: Array, Structure, and Pointer
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
자료구조: CHAP 4 리스트 (1) 순천향대학교 컴퓨터공학과 하 상 호.
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
프로그래밍 랩 – 7주 리스트.
MicroC/OS-II 3. Memory Management ITISN Technical Lab.
14장. 포인터와 함수에 대한 이해.
Introduction To Data Structures Using C
자기참조 구조체(1) 먼저 자신과 같은 형의 구조체를 포인트하는 포인터 멤버 필드를 갖는 구조체를 정의한다.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
컴퓨터 개론 및 실습 11. 동적 메모리 할당.
메모리 관리 & 동적 할당.
24장. 파일 입출력.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
* 프로그램을 간단히 하기 위해 malloc 성공체크는 안 함
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
자료구조 (Data Structure).
데이터 동적 할당 Collection class.
토론을 위한 질문 배열의 이름에는 무엇이 저장되는가? C언어에서 배열 추상데이터의 store는 어떻게 구현 되는가?
7주차: Functions and Arrays
구조체(struct)와 공용체(union)
Numerical Analysis Programming using NRs
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제 4 장 Record.
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
13. 포인터와 배열! 함께 이해하기.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)

동적 할당 메모리의 개념 프로그램이 메모리를 할당받는 방법 정적(static) 동적(dynamic) 정적 메모리 할당 프로그램이 시작되기 전에 미리 정해진 크기의 메모리를 할당받는 것 메모리의 크기는 프로그램이 시작하기 전에 결정 int i, j; int buffer[80]; char name[] = “data structure"; 처음에 결정된 크기보다 더 큰 입력이 들어온다면 처리하지 못함 더 작은 입력이 들어온다면 남은 메모리 공간은 낭비 Slide 2 (of 13)

동적 메모리 동적 메모리 실행 도중에 동적으로 메모리를 할당받는 것 사용이 끝나면 시스템에 메모리를 반납 필요한 만큼만 할당을 받고 메모리를 매우 효율적으로 사용 malloc() 계열의 라이브러리 함수를 사용 Slide 3 (of 13)

동적 메모리 할당의 과정 #include <stdio.h> #include <stdlib.h> int main(void) { int *pi; // 동적 메모리를 가리키는 포인터 pi = (int *)malloc(sizeof(int)); // ① 동적 메모리 할당 if( pi == NULL ) // 반환값이 NULL인지 검사 printf("동적 메모리 할당 오류\n"); exit(1); } *pi = 100; // ② 동적 메모리 사용 printf("%d\n", *pi); free(pi); // ③ 동적 메모리 반납 return 0; Slide 4 (of 13)

malloc()과 free() void *malloc(size_t size); malloc()은 바이트 단위로 메모리를 할당 만약 요청한 메모리 공간을 할당할 수 없는 경우에는 NULL값을 반환 void free(void *ptr); free()는 동적으로 할당되었던 메모리 블록을 시스템에 반납 ptr은 malloc()을 이용하여 동적 할당된 메모리를 가리키는 포인터 Slide 5 (of 13)

malloc3.c #include <stdio.h> #include <stdlib.h> int main(void) { int *pi; pi = (int *)malloc(5 * sizeof(int)); if(pi == NULL){ printf("메모리 할당 오류\n") ; exit(1); } pi[0] = 100; // *(pi+0) = 100;와 같다. pi[1] = 200; // *(pi+1) = 200;와 같다. pi[2] = 300; // *(pi+2) = 300;와 같다. pi[3] = 400; // *(pi+3) = 400;와 같다. pi[4] = 500; // *(pi+4) = 500;와 같다. free(pi); return 0; Slide 6 (of 13)

malloc4.c #include <stdio.h> #include <stdlib.h> #include <string.h> struct Book { int number; char title[10]; }; int main(void) { struct Book *p; p = (struct Book *)malloc(2 * sizeof(struct Book)); if(p == NULL){ printf("메모리 할당 오류\n") ; exit(1); } p->number = 1; strcpy(p->title,"C Programming"); (p+1)->number = 2; strcpy((p+1)->title,"Data Structure"); free(p); return 0; Slide 7 (of 13)

calloc()과 realloc() void *calloc(size_t n, size_t size); calloc()은 malloc()과는 다르게 0으로 초기화된 메모리 할당 항목 단위로 메모리를 할당 (예) int *p; p = (int *)calloc(5, sizeof(int)); void *realloc(void *memblock, size_t size); realloc() 함수는 할당하였던 메모리 블록의 크기를 변경 (예) int *p; p = (int *)malloc(5 * sizeof(int))); p = realloc(p, 7 * sizeof(int))); Slide 8 (of 13)

연결 리스트 배열(array) 장점: 구현이 간단하고 빠르다 단점: 크기가 고정된다. 중간에서 삽입, 삭제가 어렵다. 연결 리스트(linked list) 각각의 원소가 포인터를 사용하여 다음 원소의 위치를 가리킨다. Slide 9 (of 13)

연결 리스트의 장단점 중간에 데이터를 삽입, 삭제하는 경우 데이터를 저장할 공간이 필요할 때마다 동적으로 공간을 만들어서 쉽게 추가 구현이 어렵고 오류가 나기 쉽다. Slide 10 (of 13)

연결 리스트의 구조 노드(node) = 데이터 필드(data field)+ 링크 필드(link field) 헤드 포인터(head pointer): 첫번째 노드를 가리키는 포인터 Slide 11 (of 13)

자기 참조 구조체 자기 참조 구조체(self-referential structure)는 특별한 구조체로서 구성 멤버 중에 같은 타입의 구조체를 가리키는 포인터가 존재하는 구조체 // 데이터의 정의 typedef struct data { int id; char name[20]; char phone[12]; } DATA; // 노드의 정의 typedef struct NODE { DATA data; struct NODE *link; } NODE; Slide 12 (of 13)

Q & A Slide 13 (of 13)