1 / 74

▣ 수강동 의

▣ 수강동 의. -. http://mgr.eduitbank.com site 접속 -. 로그인 : ( 처음접속 시 ) 아이디 찾기 > 학생으로 검색 후 로그 인 ※ 주의 : 절대 비밀번호 찾기 하지 말 것 . -. 나의 정보 > 출석정보 > 자료구 조 > 수강 동의. 자료구조. ( 오른쪽 상단 ). ▣ 카페 소개. Cafe : http:// cafe.naver.com/hellolang ※ 숙제 및 문의사항은 Café 이 용. ▣ 참고사항. 자료 구조

presta
Download Presentation

▣ 수강동 의

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ▣ 수강동의 -. http://mgr.eduitbank.com site 접속 -. 로그인 : (처음접속 시)아이디찾기 > 학생으로 검색 후 로그인 ※ 주의 : 절대비밀번호 찾기 하지 말 것. -. 나의정보 > 출석정보 > 자료구조> 수강동의 자료구조 (오른쪽 상단)

  2. ▣ 카페 소개 Cafe : http://cafe.naver.com/hellolang ※ 숙제 및 문의사항은 Café 이용

  3. ▣ 참고사항

  4. 자료 구조 (Data Structure)

  5. ▣ 자료구조 이해 ◈ 자료 구조 란? -. 사전적 의미 : 데이터를 처리하는 입장에서 데이터 사이에 존재하는 관계를 개념적으로 잡은 것 -. 데이터를 효율적으로 사용할 수 있도록 구조를 만들어서 저장하는 것 Data Data Data Data Data Data Data Data Data Data Data Data

  6. ▣ 자료구조 이해 ◈ 선형 구조 -. 데이터를 선의 형태로 일렬로 저장하는 방식 -. 이전 데이터와 이후 데이터는 1대 1 관계를 가짐 -. 스택(Stack) , 큐(Queue) , 연결리스트(Linked List) ◈ 비 선형 구조 -. 데이터를 선의 형태가 아닌 다른 형태로 저장하는 방식 -. 이전 데이터와 이후 데이터는 1대 다 관계를 가짐 -. 트리(Tree) , 그래프(Graph) Data Data Data Data Data Data Data Data

  7. ▣ 자료구조 이해 ◈ 스택(Stack) -. 삽입(insert)과 삭제(delete)가 한쪽 끝에서만 수행되는 구조 -. LIFO(Last In First Out) : 마지막에 들어간 데이터가 먼저 나오는 구조 입력(Push) 출력(Pop) <Data 처리순서> 입력 : Data1 -> Data2 -> Data3 출력 : Data3 -> Data2 -> Data1 Data3 Top Data2 Data1 Bottom

  8. ▣ 자료구조 이해 ◈ 큐(Queue) -. 한쪽에선 삽입(insert)만 한쪽에선 삭제(delete)만 수행되는 구조 -. FIFO(First In First Out) : 먼저 들어간 데이터가 먼저 나오는 구조 입력 (enqueue) 출력 (dequeue) Data3 Data2 Data1 Rear Front <Data 처리순서> 입력 : Data1 -> Data2 -> Data3 출력 : Data1 -> Data2 -> Data3

  9. ▣ 자료구조 이해 ◈ 리스트(List) -. 데이터를 순서대로 저장해 놓는 구조 -. 대표적으로 배열이 있음 -. 스택, 큐도 넓은 의미로는 리스트에 해당됨 <배열> Data1 Data2 Data3 [0] [1] [2] [3] [4] Data4

  10. ▣ 자료구조 이해 ◈ 연결 리스트(List) -. 데이터들을 링크를 통해 연결시켜 저장하는 구조 노드(Node) data link

  11. ▣ 자료구조 이해 ◈ 트리(Tree) -. 나무의 뿌리에서 가지를 뻗는 것처럼 하나의 데이터에 가지를 뻗어 저장하는 구조 노드(Node) link data link

  12. ▣ 자료구조 이해 ◈ 그래프(Graph) -. 컴퓨터로 수치 계산 등을 한 결과를 그대로 숫자(number)의 나열로서 표현하는 것이 아니고, 시각적으로 이해할 수 있도록 막대 그래프, 원 그래프로 표시한 것

  13. ▣ 자료구조 이해 ◈ 알고리즘 -. 어떤문제를 해결하기 위한 방법

  14. ▣ 자료구조 구현 ◈ 스택(Stack) -. 배열을 이용한 Stack 구현 입력(Push) 출력(Pop) Data3 Top Data2 Data1

  15. ▣ 자료구조 구현 ◈ Stack Code (Node , Push 함수 구현) #include <stdio.h> typedefstruct stack{ int stackArea[5]; int top; }Stack , *PStack; void Push(Stack *st , int data){ if(st->top>=((int)sizeof(st->stackArea)/4)-1) { printf("Stack is FULL\n"); return; } st->top++; st->stackArea[st->top] = data; }

  16. ▣ 자료구조 구현 ◈ Stack Code (Pop 함수 구현) int Pop(Stack *st){ int data; if(st->top<0) { printf("Stack is EMPTY\n"); return 0; } data = st->stackArea[st->top]; st->top--; return data; }

  17. ▣ 자료구조 구현 ◈ Stack Code (main 함수 구현) void main(void) { Stack st; st.top = -1; Push(&st , 10); Push(&st , 20); Push(&st , 30); printf("%d\n" , Pop(&st)); printf("%d\n" , Pop(&st)); printf("%d\n" , Pop(&st)); printf("%d\n" , Pop(&st)); }

  18. ▣ 자료구조 구현 ◈ 분석 Stack 영역 Stack st; st.top = -1; top -1 [4] [3] [2] [1] [0] main() stackArea st

  19. ▣ 자료구조 구현 ◈ 분석 Stack 영역 Push(&st , 10); top -1 0 [4] [3] [2] [1] [0] main() stackArea 10 st 100번지 Push() 100 &st 10 st data

  20. ▣ 자료구조 구현 ◈ 분석 Stack 영역 Push(&st , 20); top 1 0 [4] [3] [2] [1] [0] main() stackArea 20 10 st 100번지 Push() 100 &st 20 st data

  21. ▣ 자료구조 구현 ◈ 분석 Stack 영역 Push(&st , 30); top 2 1 [4] [3] [2] [1] [0] main() stackArea 30 20 10 st 100번지 Push() 100 &st 30 st data

  22. ▣ 자료구조 구현 ◈ 분석 Stack 영역 printf("%d\n" , Pop(&st)); top 1 2 [4] [3] [2] [1] [0] main() stackArea 30 20 30 10 st 100번지 Pop() 100 &st 30 st data

  23. ▣ 자료구조 구현 ◈ 분석 Stack 영역 printf("%d\n" , Pop(&st)); top 0 1 [4] [3] [2] [1] [0] main() stackArea 30 20 20 10 st 100번지 Pop() 100 &st 20 st data

  24. ▣ 자료구조 구현 ◈ 분석 Stack 영역 printf("%d\n" , Pop(&st)); top -1 0 [4] [3] [2] [1] [0] main() stackArea 30 20 10 10 st 100번지 Pop() 100 &st 10 st data

  25. ▣ 자료구조 구현 ◈ 분석 Stack 영역 printf("%d\n" , Pop(&st)); top -1 [4] [3] [2] [1] [0] main() stackArea 30 20 0 10 st 100번지 Pop() 100 &st st data

  26. ▣ 자료구조 구현 ◈ 스택(Stack) -. 연결리스트를 이용한 Stack 구현 입력(Push) Push(Data1) 출력(Pop) Push(Data2) Push(Data3) Data3 data data data link link link Pop( ) Pop( ) Data2 Pop( ) Top Data1

  27. ▣ 자료구조 구현 ◈ Stack Code (Node , GetNode함수 구현) #include <stdio.h> #include <stdlib.h> #define EMPTY 0 struct node { int data; struct node * link; }; typedefstruct node Stack; Stack * GetNode(){ Stack * tmp; tmp=(Stack *)malloc(sizeof(Stack)); tmp->link=EMPTY; return tmp; }

  28. ▣ 자료구조 구현 ◈ Stack Code (Push 함수 구현) void Push(Stack **top, int data){ Stack *tmp; tmp=*top; *top=GetNode(); (*top)->data=data; (*top)->link=tmp; }

  29. ▣ 자료구조 구현 ◈ Stack Code (Pop 함수 구현) int Pop (Stack **top) { Stack *tmp; int num; if(*top==EMPTY){ printf("Stack is empty!!!!"); return NULL; } tmp=*top; num=tmp->data; *top=(*top)->link; free(tmp); return num; }

  30. ▣ 자료구조 구현 ◈ Stack Code (Main 함수 구현) void main () { Stack * top=EMPTY; Push(&top, 10); Push(&top, 20); Push(&top, 30); printf("%d", Pop(&top)); printf("%d", Pop(&top)); printf("%d", Pop(&top)); }

  31. ▣ 자료구조 구현 ◈ 분석 Stack * top=EMPTY; Stack 영역 0 main() *top

  32. ▣ 자료구조 구현 ◈ 분석 Push(&top, 10); Stack 영역 Heap 영역 0 main() 1000 *top 100번지 Push() &top 100 10 0 **top data *tmp 1000 GetNode() 10 0 *tmp data *link 1000번지

  33. ▣ 자료구조 구현 ◈ 분석 Push(&top, 20); Stack 영역 Heap 영역 1000 main() 2000 *top 100번지 Push() &top 100 20 1000 20 1000 0 **top data *tmp data *link 2000번지 2000 GetNode() 10 0 *tmp data *link 1000번지

  34. ▣ 자료구조 구현 ◈ 분석 Push(&top, 30); Stack 영역 Heap 영역 30 2000 0 2000 main() 3000 data *link 3000번지 *top 100번지 Push() &top 100 30 2000 20 1000 **top data *tmp data *link 2000번지 3000 GetNode() 10 0 *tmp data *link 1000번지

  35. ▣ 자료구조 구현 ◈ 분석 printf("%d", Pop(&top)); Stack 영역 Heap 영역 30 2000 3000 main() 2000 data *link 3000번지 30 *top 100번지 Pop() &top 100 30 3000 20 1000 **top num *tmp data *link 2000번지 10 0 data *link 1000번지

  36. ▣ 자료구조 구현 ◈ 분석 printf("%d", Pop(&top)); Stack 영역 Heap 영역 2000 main() 1000 20 *top 100번지 Pop() &top 100 20 2000 20 1000 **top num *tmp data *link 2000번지 10 0 data *link 1000번지

  37. ▣ 자료구조 구현 ◈ 분석 printf("%d", Pop(&top)); Stack 영역 Heap 영역 1000 main() 0 10 *top 100번지 Pop() &top 100 10 1000 **top num *tmp 10 0 data *link 1000번지

  38. ▣ 자료구조 구현 ◈ 분석 Stack 영역 Heap 영역 0 main() *top 100번지

  39. ▣ 자료구조 구현 ◈ 문제 -. 미로게임 Stack 만들기

  40. ▣ 자료구조 이해 ◈ 큐(Queue) -. 연결리스트를 이용한 Queue 구현 Front Rear Data1 Data2 Data3 data data data link link link 출력 (dequeue) 입력 (enqueue) Enqueue(Data1) Dequeue( ) Enqueue(Data2) Dequeue( ) Enqueue(Data3) Dequeue( )

  41. ▣ 자료구조 구현 ◈ 문제 -. 연결리스트를 이용한 Queue 구현하기

  42. ▣ 자료구조 구현 ◈ 재귀함수 -. 함수 내에서 자기 자신을 다시 호출하는 함수 Func( ) 함수 Func( ) 함수 Func( ) 함수 …….. Func( ); Func( ); Func( ); -. 종료되는 시점을 제대로 지정해주지 않으면 메모리가 가득 찰 때까지 계속해서 호출 하게 됨

  43. ▣ 함수 ◈ 문제 #include <stdio.h> void Func( ); void main(void) { Func( ); } void Func( ) { printf("Func함수 호출\n"); Func( ); } main 함수 영역 Func함수 영역 Func함수 영역 Func함수 영역 º º º

  44. ▣ 함수 ◈ 문제 #include <stdio.h> void Func( ); void main(void) { Func( ); } void Func( ) { intnum = 0; if(num == 5) return; printf("Func함수 호출\n"); num++; Func(); } main 함수 영역 Func함수 영역 Func함수 영역 Func함수 영역 0 1 num num num 0 1 0 1 º º º

  45. ▣ 함수 ◈ 문제 0 3 1 2 5 4 #include <stdio.h> void Func( ); void main(void) { Func( ); } void Func( ) { staticintnum = 0; if(num == 5) return; printf("Func함수 호출\n"); num++; Func(); } main 함수 영역 Func함수 영역 Func함수 영역 Func함수 영역 Func함수 영역 Func함수 영역 num

  46. ▣ 함수 ◈ 문제 #include <stdio.h> void Func( ); void main(void) { Func( 1 ); } void Func( int num ) { if(num == 5) return; printf("Func함수 호출\n"); Func( num+1 ); } main 함수 영역 Func함수 영역 Func함수 영역 Func함수 영역 Func함수 영역 Func함수 영역 1 num num num num num 2 3 4 5

  47. ▣ 자료구조 구현 ◈ 예제 -. 1 ~ 5 까지의 합을 구하는 함수를 작성하시오 (재귀함수 사용)

  48. ▣ 자료구조 구현 ◈ 예제 -. 1 ~ 5 까지의 합을 구하는 함수를 작성하시오 (재귀함수 사용) #include <stdio.h> int Sum(int n) { if(n==5) { return n; } return n+Sum(n+1); } void main() { printf("%d\n" , Sum(1)); } 15 main() Sum() 1 + 14 = n Sum() 2 + 12 = n Sum() 3 + 9 = n 5 Sum() 4 + = n Sum() 5 n

  49. ▣ 자료구조 구현 ◈ 연결 리스트(Linked List) -. 재귀함수를 이용한 연결리스트 구현(삽입) Head Data3 Data1 Data2 data data data link link link InsertNode(Data1) InsertNode(Data2) InsertNode(Data3)

  50. ▣ 자료구조 구현 ◈ Linked List Code (Node , GetNode함수 구현) #include <stdio.h> #include <malloc.h> typedefstruct node{ int data; struct node *link; }Linklist; Linklist * GetNode(){ Linklist * ptr; ptr = (Linklist * ) malloc ( sizeof ( Linklist ) ); ptr->link=NULL; return ptr; }

More Related