PowerPoint 프레젠테이션

Similar documents
11장 포인터

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

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

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


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

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

Microsoft PowerPoint - Chapter_09.pptx

Chapter 4. LISTS

untitled

Chapter 4. LISTS

기초컴퓨터프로그래밍

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

슬라이드 1

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

03장.스택.key

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

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

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

03_queue

슬라이드 1

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

슬라이드 1


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

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

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

K&R2 Reference Manual 번역본

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

02장.배열과 클래스

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

untitled

06장.리스트

chap 5: Trees

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

untitled

PowerPoint Template

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

Microsoft PowerPoint - 자료구조2008Chap06

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

C 언어 프로그래밊 과제 풀이

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

Chapter 4. LISTS

슬라이드 1

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

1장. 리스트

본 강의에 들어가기 전

chap7.key

Microsoft PowerPoint - chap05-제어문.pptx

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

歯9장.PDF

Chapter_06

Microsoft PowerPoint - 08-Queue.ppt

chap8.PDF

Microsoft PowerPoint - 08-chap06-Queue.ppt

Algorithms

14 주차구조체와공용체

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - 07_(C_Programming)_(Korean)_Composite_Data_Types

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

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

01_List

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

untitled

BMP 파일 처리

Chap 6: Graphs

ABC 10장

중간고사

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

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

Algorithms

5.스택(강의자료).key

; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - chap09-1.ppt

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

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

商用

<4D F736F F F696E74202D FBFACB0E120C0DAB7E1B1B8C1B6205BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A637C0E52DB0EDB1DEBFACB0E1B8AEBDBAC6AE2E >

KNK_C_05_Pointers_Arrays_structures_summary_v02

o 스택 (stack) ~ 쌓아놓은더미 1. 스택의개요 - 2 -

C 언어 강의노트

슬라이드 1

Microsoft PowerPoint - chap06-2pointer.ppt

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint - 제3장-배열.pptx

03장.스택

Microsoft PowerPoint - chap06-1Array.ppt

이번장에서학습할내용 구조체란무엇인가? 구조체의선언, 초기화, 사용 구조체의배열 구조체와포인터 구조체와함수 공용체 열거형 typedef 구조체는복잡한내용을일목요연하여정리하는데유용하게사용됩니다. 2

컴파일러

Microsoft PowerPoint - Chapter14_17.pptx

슬라이드 1

Microsoft PowerPoint - Lesson14.pptx

Microsoft PowerPoint - Lesson14.pptx

중간고사 (자료 구조)

Microsoft PowerPoint - chap-11.pptx

슬라이드 1

Transcription:

C 언어포인터정복하기 16 강. 포인터로자료구조화하기 TAE-HYONG KIM COMPUTER ENG, KIT

2 학습내용 구조체멤버와구조체포인터멤버 다른구조체 ( 변수 ) 를가리키는구조체 ( 변수 ) 연결된리스트 의구성및관리 포인터로 연결된리스트 탐색하기

3 중첩구조체에자료저장하기 중첩된구조체변수에값저장하기 struct person { char PRID[15]; char name[9]; struct car { char CRID[10]; char model[20]; int pyear; struct person owner; 만약멤버구조체 ( 변수값 ) 를독립적으로사용하거나중복해서사용하려면자료가중복저장되어야한다 해결책은? 저장하지말고가리켜라! struct person person1 = { 800101-1234567, 홍길동 struct car car1 = { 12 가 3456, 소나타, 2013, car2; printf( %u, sizeof(car1)); car1.owner = person1; car2.owner = person1; printf( %u %u, &person1, &car1); person1 PRID 홍길동 car1 CRID 소나타 pyear PRID 홍길동 name car2 CRID model pyear PRID name 홍길동

4 구조체포인터멤버사용하기 구조체포인터멤버로구조체연결하기 struct person { char PRID[15]; char name[9]; struct car { char CRID[10]; char model[20]; int pyear; struct person *owner; 저장공간을절약할수있다 자료를관계형으로구조화할수있다. 구조체간관계가복잡하면자료의이해와접근이어려워진다 struct person person1 = { 800101-1234567, 홍길동 struct car car1 = { 12 가 3456, 현대소나타, 2013, car2; printf( %u, sizeof(car1)); car1.owner = &person1; car2.owner = &person1; printf( %s, car1.owner->name); person1 PRID 홍길동 car1 CRID 소나타 pyear owner car2 CRID model pyear owner

5 구조체가서로연결될수있나? 친구관계를연결된구조체로구현해보자 struct student { char stid[9]; char name[9]; struct student *friend; // struct student *friends[n]; struct student stu1 = { 김모군, 20141111 Struct student stu2 = { 이모군, 20142222 Struct student stu3 = { 박모군, 20143333 stu1.friend = &stu2; stu2.friend = &stu3; stu3.friend = &stu2; 연결리스트 (linked list) stu1 1111 김모군 stu2 2222 이모군 stu3 3333 박모군 김모군의친구의친구는? friend friend friend printf( %s, stu1.friend->name); printf( %s, stu1.friend->friend->name);

6 연결리스트의종류 선형연결리스트 word1 word2 boy girl next next word3 man NULL struct Wnode { char word[20]; struct Wnode *next; word1, word2, word3; strcpy(word1.word, boy ); strcpy(word1.word, girl ); strcpy(word1.word, man ); 트리구조의리스트 term1 + left right term2 term3 a b left left right right word1.next = &word2; word2.next = &word3; word3.next = NULL; struct BTnode { char symbol; struct BTnode *left; struct BTnode *right; term1={0, term2={0, term3={0 term1.symbol = + ; term1.left = &term2; term1.right = &term3; term2.symbol = a ; Term3.symbol = b ;

7 선형연결리스트의구성 (1) 리스트의생성 노드의동적생성 메모리동적할당이용 노드의처음위치와끝위치를관리 ( 각각 head, tail 포인터 ) 삽입과삭제의위치는리스트의종류 ( 큐 (FIFO), 스택 (LIFO)) 에따라결정 패턴 23-1 선형연결리스트의구성 ( 단어장구조 ) #include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct Wnode { char word[20]; char meaning[20]; struct Wnode *next; WNODE; // for strcmp() // for malloc(), free() // 단어 // 단어의뜻 int main(void) { WNODE *head = NULL; // 연결리스트의시작노드를가리킴 WNODE *tail = NULL; // 연결리스트의삽입위치 ( 끝 ) 을가리킴 int sel; // 선택메뉴저장...

8 선형연결리스트의구성 (2) 패턴 23-2 선형연결리스트의구성 ( 단어장메뉴 ) do { printf(" 선택하세요 (1. 추가, 2. 삭제, 3. 검색, 4. 출력, 5. 종료 ): "); scanf("%d", &sel); fflush(stdin); switch (sel) { case 1: // 단어추가 리스트뒤에추가 tail = addword(tail); // tail 포인터갱신 if (head == NULL) // 단어가없었던경우 head = tail; // head를갱신된 tail위치로 break; case 2: // 단어삭제 리스트앞에서삭제 head = deleteword(head); // head 포인터갱신 if (head == NULL) // 단어모두삭제시 break; case 3: tail = NULL; searchword(head); // tail 포인터초기화 // 리스트앞에서부터검색 break; case 4: printword(head); // 리스트앞에서부터출력 break; while (sel!= 5); // 종료선택시반복문탈출 return 0;

9 선형연결리스트의처리 패턴 23-3 선형연결리스트의처리 ( 단어추가, 삭제 : 큐방식 ) WNODE *addword(wnode *in) { if (in == NULL) // 단어가하나도없을경우 in = (WNODE *)malloc(sizeof(wnode)); // 단어메모리할당 else { in->next = (WNODE *)malloc(sizeof(wnode)); // 다음노드생성 in = in->next; // 생성노드로위치이동 printf(" 단어를입력하세요 : "); fgets(in->word, sizeof(in->word), stdin); printf(" 단어의뜻을입력하세요 : "); fgets(in->meaning, sizeof(in->meaning), stdin); in->next = NULL; // 생성노드마감 return in; // 생성노드위치반환 WNODE *deleteword(wnode *out) { WNODE *delete = out; // 삭제할단어가리키는임시포인터 if (out!= NULL) { // 삭제할단어가있는경우 printf(" 삭제되는단어 : %s", out->word); out = out->next; // head 위치이동위해 free(delete); // 삭제하는단어메모리반환 else // 삭제할단어가없는경우 puts(" 삭제할단어가없습니다 "); return out; // 새로운 head 위치반환

10 선형연결리스트의탐색 패턴 23-4 선형연결리스트의탐색 ( 단어검색과출력 ) void searchword(wnode *start) { WNODE *search = start; // 탐색포인터생성및초기화 char Sword[20]; // 탐색단어저장배열 printf(" 뜻을알고자하는단어를입력하세요 : "); fgets(sword, sizeof(sword), stdin); while (search!= NULL) // 리스트의끝까지탐색 if (!strcmp(sword, search->word)) { // 탐색단어가맞으면 printf(" 찾는단어 : %s", Sword); printf(" 단어의뜻 : %s\n", search->meaning); return; else // 탐색단어가아니면 search = search->next; // 다음단어로이동 printf(" 입력한단어가없습니다.\n"); void printword(wnode *start) { WNODE *print = start; // 출력포인터생성및초기화 int Wcount = 0; // 단어개수저장변수 while (print!= NULL) { // 리스트의끝까지탐색 printf("[%d] 단어 : %s", ++Wcount, print->word); printf("[%d] 의미 : %s\n", Wcount, print->meaning); print = print->next; // 다음단어로이동 printf(" 총 %d개의단어가있습니다 \n", Wcount);

11 C 포인터정복하기를마치면서 C 포인터정복은이제시작이다 예제를실행해보고무수히변형해보자 예제를확장해보자 작은과제를만들어보자 좀더큰과제 ( 작품 ) 에도전해보자