74
▣ 수수수수 -. http://mgr.eduitbank.com site 수수 -. 수수수 : ( 수수수수 수 ) 수수수 수수 > 수수수수 수수 수 수수수 ※ 수수 : 수수 수수수수 수수 수수 수 수 . -. 수수 수수 > 수수수수 > 수수수수 > 수수 수수 ( 수수수 수수 ) 수수수수

▣ 수강동 의

  • Upload
    presta

  • View
    102

  • Download
    3

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: ▣ 수강동 의

▣ 수강동의

-. http://mgr.eduitbank.com site 접속 -. 로그인 : ( 처음접속 시 ) 아이디 찾기 > 학생으로 검색 후 로그인

※ 주의 : 절대 비밀번호 찾기 하지 말 것 .

-. 나의 정보 > 출석정보 > 자료구조 > 수강 동의

( 오른쪽 상단 )

자료구조

Page 2: ▣ 수강동 의

▣ 카페 소개

Cafe : http://cafe.naver.com/hellolang

※ 숙제 및 문의사항은 Café 이용

Page 3: ▣ 수강동 의

▣ 참고사항

Page 4: ▣ 수강동 의

자료 구조(Data Struc-

ture)

Page 5: ▣ 수강동 의

▣ 자료구조 이해

◈ 자료 구조 란 ? -. 사전적 의미 : 데이터를 처리하는 입장에서 데이터 사이에 존재하는

관계를 개념적으로 잡은 것 -. 데이터를 효율적으로 사용할 수 있도록 구조를 만들어서 저장하는 것

Data

Data

Data

Data Dat

a

Data

Data

Data

Data

Data

Data

Data

Page 6: ▣ 수강동 의

▣ 자료구조 이해

◈ 선형 구조 -. 데이터를 선의 형태로 일렬로 저장하는 방식 -. 이전 데이터와 이후 데이터는 1 대 1 관계를 가짐 -. 스택 (Stack) , 큐 (Queue) , 연결리스트 (Linked List)

◈ 비 선형 구조 -. 데이터를 선의 형태가 아닌 다른 형태로 저장하는 방식 -. 이전 데이터와 이후 데이터는 1 대 다 관계를 가짐 -. 트리 (Tree) , 그래프 (Graph)

Data Data Data

Data

Data

Data

Data

Data

Page 7: ▣ 수강동 의

▣ 자료구조 이해

◈ 스택 (Stack) -. 삽입 (insert) 과 삭제 (delete) 가 한쪽 끝에서만 수행되는 구조 -. LIFO(Last In First Out) : 마지막에 들어간 데이터가 먼저 나오는 구조

Data1

Data2

Data3

입력 (Push) 출력 (Pop)

Bottom Top

<Data 처리순서 >입력 : Data1 -> Data2 -> Data3출력 : Data3 -> Data2 -> Data1

Page 8: ▣ 수강동 의

▣ 자료구조 이해

◈ 큐 (Queue) -. 한쪽에선 삽입 (insert) 만 한쪽에선 삭제 (delete) 만 수행되는 구조 -. FIFO(First In First Out) : 먼저 들어간 데이터가 먼저 나오는 구조

Data3 Data2 Data1

입력(enqueue)

출력(dequeue)

Front

Rear<Data 처리순서 >입력 : Data1 -> Data2 -> Data3출력 : Data1 -> Data2 -> Data3

Page 9: ▣ 수강동 의

▣ 자료구조 이해

◈ 리스트 (List) -. 데이터를 순서대로 저장해 놓는 구조 -. 대표적으로 배열이 있음 -. 스택 , 큐도 넓은 의미로는 리스트에 해당됨

[0] [1] [2] [3] [4]

Data1 Data2 Data3

Data4

< 배열 >

Page 10: ▣ 수강동 의

▣ 자료구조 이해

◈ 연결 리스트 (List) -. 데이터들을 링크를 통해 연결시켜 저장하는 구조

data link

노드 (Node)

Page 11: ▣ 수강동 의

▣ 자료구조 이해

◈ 트리 (Tree) -. 나무의 뿌리에서 가지를 뻗는 것처럼 하나의 데이터에 가지를 뻗어 저장하는 구조

data linklink

노드 (Node)

Page 12: ▣ 수강동 의

▣ 자료구조 이해

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

Page 13: ▣ 수강동 의

▣ 자료구조 이해

◈ 알고리즘 -. 어떤 문제를 해결하기 위한 방법

Page 14: ▣ 수강동 의

▣ 자료구조 구현

◈ 스택 (Stack) -. 배열을 이용한 Stack 구현

Data1

Data2

Data3

입력 (Push) 출력 (Pop)

Top

Page 15: ▣ 수강동 의

▣ 자료구조 구현

◈ Stack Code (Node , Push 함수 구현 )

#include <stdio.h>

typedef struct 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;

}

Page 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;

}

Page 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));

}

Page 18: ▣ 수강동 의

▣ 자료구조 구현

◈ 분석

Stack 영역

main()

stackArea

top

st

-1

[4

]

[3

]

[2

]

[1

]

[0

]

st.top = -1;Stack st;

Page 19: ▣ 수강동 의

▣ 자료구조 구현

◈ 분석

Stack 영역

main()

stackArea

top

st

-1

Push() &st 10

100 번지

100

st data

0

[4

]

[3

]

[2

]

[1

]

[0

]

10

Push(&st , 10);

Page 20: ▣ 수강동 의

▣ 자료구조 구현

◈ 분석

Stack 영역

main()

Push() &st 20100

st data

stackArea

top

st100 번지

[4

]

[3

]

[2

]

[1

]

[0

]

0

10

1

20

Push(&st , 20);

Page 21: ▣ 수강동 의

▣ 자료구조 구현

◈ 분석

Stack 영역

main()

Push() &st 30100

st data

stackArea

top

st100 번지

[4

]

[3

]

[2

]

[1

]

[0

]

1

10

2

20

30

Push(&st , 30);

Page 22: ▣ 수강동 의

▣ 자료구조 구현

◈ 분석

Stack 영역

main()

Pop() &st100

st data

stackArea

top

st100 번지

[4

]

[3

]

[2

]

[1

]

[0

]

2

10

1

20

30

30

30

printf("%d\n" , Pop(&st));

Page 23: ▣ 수강동 의

▣ 자료구조 구현

◈ 분석

Stack 영역

main()

Pop() &st100

st data

stackArea

top

st100 번지

[4

]

[3

]

[2

]

[1

]

[0

]

1

10

0

20

30

20

20

printf("%d\n" , Pop(&st));

Page 24: ▣ 수강동 의

▣ 자료구조 구현

◈ 분석

Stack 영역

main()

Pop() &st100

st data

stackArea

top

st100 번지

[4

]

[3

]

[2

]

[1

]

[0

]

0

10

-1

20

30

10

10

printf("%d\n" , Pop(&st));

Page 25: ▣ 수강동 의

▣ 자료구조 구현

◈ 분석

Stack 영역

main()

Pop() &st100

st data

stackArea

top

st100 번지

[4

]

[3

]

[2

]

[1

]

[0

]

10

-1

20

30

0

printf("%d\n" , Pop(&st));

Page 26: ▣ 수강동 의

▣ 자료구조 구현

◈ 스택 (Stack) -. 연결리스트를 이용한 Stack 구현

입력 (Push) 출력 (Pop)

Top

data link

Data1

data link

Data2

data link

Data3

Push(Data1)

Push(Data2)

Push(Data3)

Pop( )

Pop( )

Pop( )

Page 27: ▣ 수강동 의

▣ 자료구조 구현

◈ Stack Code (Node , GetNode 함수 구현 )

#include <stdio.h>#include <stdlib.h>#define EMPTY 0

struct node {int data;struct node * link;

};typedef struct node Stack;

Stack * GetNode(){Stack * tmp;tmp=(Stack *)malloc(sizeof(Stack));tmp->link=EMPTY;return tmp;

}

Page 28: ▣ 수강동 의

▣ 자료구조 구현

◈ Stack Code (Push 함수 구현 )

void Push(Stack **top, int data){Stack *tmp;tmp=*top;

*top=GetNode();

(*top)->data=data;(*top)->link=tmp;

}

Page 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;

}

Page 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));

}

Page 31: ▣ 수강동 의

Stack 영역

▣ 자료구조 구현

◈ 분석 Stack * top=EMPTY;

main()

*top

0

Page 32: ▣ 수강동 의

Stack 영역 Heap 영역

▣ 자료구조 구현

◈ 분석 Push(&top, 10);

main()

*top

0

Push() &top 10

**top data

100 번지

100

*tmp

0

GetNode()

*tmpdata *link1000 번지

10000

1000

10

Page 33: ▣ 수강동 의

Stack 영역 Heap 영역

▣ 자료구조 구현

◈ 분석 Push(&top, 20);

main()

*top

1000

Push() &top 20

**top data

100 번지

100

*tmp

1000

GetNode()

*tmpdata *link1000 번지

20000

2000

10

data *link2000 번지

020 1000

Page 34: ▣ 수강동 의

Stack 영역 Heap 영역

▣ 자료구조 구현

◈ 분석 Push(&top, 30);

main()

*top

2000

Push() &top 30

**top data

100 번지

100

*tmp

2000

GetNode()

*tmpdata *link1000 번지

30000

3000

10

data *link2000 번지

20 1000

data *link3000 번지

030 2000

Page 35: ▣ 수강동 의

Stack 영역 Heap 영역

▣ 자료구조 구현

◈ 분석 printf("%d", Pop(&top));

main()

*top

3000

Pop() &top 30

**top num

100 번지

100

*tmp

3000

data *link1000 번지

0

2000

10

data *link2000 번지

20 1000

data *link3000 번지

30 2000

30

Page 36: ▣ 수강동 의

Stack 영역 Heap 영역

▣ 자료구조 구현

◈ 분석 printf("%d", Pop(&top));

main()

*top

2000

Pop() &top 20

**top num

100 번지

100

*tmp

2000

data *link1000 번지

0

1000

10

data *link2000 번지

20 1000

20

Page 37: ▣ 수강동 의

Stack 영역 Heap 영역

▣ 자료구조 구현

◈ 분석 printf("%d", Pop(&top));

main()

*top

1000

Pop() &top 10

**top num

100 번지

100

*tmp

1000

data *link1000 번지

0

0

10

10

Page 38: ▣ 수강동 의

Stack 영역 Heap 영역

▣ 자료구조 구현

◈ 분석

main()

*top

0

100 번지

Page 39: ▣ 수강동 의

▣ 자료구조 구현

◈ 문제

-. 미로게임 Stack 만들기

Page 40: ▣ 수강동 의

▣ 자료구조 이해

◈ 큐 (Queue) -. 연결리스트를 이용한 Queue 구현

Front Rear

data link

출력(dequeue)

입력(enqueue)

Enqueue(Data1)

Enqueue(Data2)

Enqueue(Data3)

Dequeue( )

Dequeue( )

Dequeue( )

Data1

data link

Data2

data link

Data3

Page 41: ▣ 수강동 의

▣ 자료구조 구현

◈ 문제

-. 연결리스트를 이용한 Queue 구현하기

Page 42: ▣ 수강동 의

◈ 재귀함수 -. 함수 내에서 자기 자신을 다시 호출하는 함수

▣ 자료구조 구현

Func( ) 함수

Func( );

Func( ) 함수

Func( );

Func( ) 함수

Func( );

……..

-. 종료되는 시점을 제대로 지정해주지 않으면 메모리가 가득 찰 때까지 계속해서 호출 하게 됨

Page 43: ▣ 수강동 의

◈ 문제

#include <stdio.h>

void Func( );void main(void){

Func( );}

void Func( ){

printf("Func 함수 호출 \n");

Func( );}

▣ 함수

main 함수 영역

Func 함수 영역

Func 함수 영역

Func 함수 영역

ººº

Page 44: ▣ 수강동 의

◈ 문제

#include <stdio.h>void Func( );void main(void){

Func( );}void Func( ){

int num = 0;if(num == 5)

return;printf("Func 함수 호출 \

n");num++;Func();

}

▣ 함수

main 함수 영역

Func 함수 영역

ººº

num01

Func 함수 영역num

01

Func 함수 영역num

01

Page 45: ▣ 수강동 의

◈ 문제

#include <stdio.h>void Func( );void main(void){

Func( );}void Func( ){

static int num = 0;if(num == 5)

return;printf("Func 함수 호출 \

n");num++;Func();

}

▣ 함수

main 함수 영역

Func 함수 영역

num01

Func 함수 영역

Func 함수 영역

Func 함수 영역

Func 함수 영역

2345

Page 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 함수 영역

num1

num2

num3

num4

num5

Page 47: ▣ 수강동 의

◈ 예제

-. 1 ~ 5 까지의 합을 구하는 함수를 작성하시오 ( 재귀함수 사용 )

▣ 자료구조 구현

Page 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));}

▣ 자료구조 구현

main()Sum()

n1

Sum()

n2

Sum()

n3

Sum()

n4

Sum()

n5

5+ =

9+ =

12+ =

14+ =

15

Page 49: ▣ 수강동 의

▣ 자료구조 구현

◈ 연결 리스트 (Linked List) -. 재귀함수를 이용한 연결리스트 구현 ( 삽입 )

Head

data link

Data1

data link

Data2

data link

Data3

InsertNode(Data1)

InsertNode(Data2)

InsertNode(Data3)

Page 50: ▣ 수강동 의

▣ 자료구조 구현

◈ Linked List Code (Node , GetNode 함수 구현 )

#include <stdio.h>#include <malloc.h>

typedef struct node{int data;struct node *link;

}Linklist;

Linklist * GetNode(){Linklist * ptr;ptr = (Linklist * ) malloc ( sizeof ( Linklist ) );ptr->link=NULL;return ptr;

}

Page 51: ▣ 수강동 의

▣ 자료구조 구현

◈ Linked List Code (InsertNode , main 함수 구현 )

void InsertNode (Linklist **head, int data) {if ( *head == NULL ) {

*head = GetNode( );(*head)->data = data;return ;

}InsertNode( &(*head)->link , data );

}

void main ( ) {Linklist * head =NULL;

InsertNode( &head, 10 );InsertNode( &head, 20 );InsertNode( &head, 30 );

}

Page 52: ▣ 수강동 의

▣ 자료구조 구현

◈ 문제

-. 연결리스트 출력 함수 만들기

Page 53: ▣ 수강동 의

▣ 자료구조 구현

◈ 연결 리스트 (Linked List) -. 재귀함수를 이용한 연결리스트 구현 ( 추가 )

Head

data link

Data1

data link

Data2

data link

Data3

AddNode(Data1 , Data4)

data link

Data4

Page 54: ▣ 수강동 의

▣ 자료구조 구현

◈ 연결 리스트 (Linked List) -. 재귀함수를 이용한 연결리스트 구현 ( 삭제 )

Head

data link

Data1

data link

Data2

data link

Data3

DeleteNode(Data2)

Page 55: ▣ 수강동 의

▣ 자료구조 구현

◈ 문제

-. 연결리스트 추가 / 삭제 함수 만들기

Page 56: ▣ 수강동 의

▣ 자료구조 구현

◈ 문제

-. 연결리스트를 이용한 학생관리 프로그램 만들기

Page 57: ▣ 수강동 의

▣ 자료구조 구현

◈ 트리 (TREE) -. 계층적 구조를 가진 데이터를 표현

A

B D

E GF

C

IH

ROOT Node

Node

Leap Node( 말단 Node)

형제 Node

부모 Node

자식 Node

Page 58: ▣ 수강동 의

▣ 자료구조 구현

◈ 이진 트리 (BINARY TREE) -. Node 의 자식 수가 2 이하인 트리

A

B C

D E F

Page 59: ▣ 수강동 의

▣ 자료구조 구현

◈ 전 이진 트리 (FULL BINARY TREE) -. 단말 Node 가 아닌 모든 Node 가 2 개의 자식을 가진 트리

A

B C

D E GF

Page 60: ▣ 수강동 의

▣ 자료구조 구현

◈ 이진 탐색 트리 (BINARY SEARCH TREE) -. 순서가 있는 이진 트리

4

2 6

1 3 75

Page 61: ▣ 수강동 의

▣ 자료구조 이해

◈ 이진 탐색 트리 (BINARY SEARCH TREE) 구현 -. 순서가 있는 이진 트리

data RightLeft

ROOTInsertNode(10)

10

InsertNode(20)

20

InsertNode(5)

15

InsertNode(15)

5

Page 62: ▣ 수강동 의

▣ 자료구조 구현

◈ Tree Code (Node , GetNode 함수 구현 )

#include <stdio.h>#include <malloc.h>

typedef struct node {struct node *left;int data;struct node *right;

}BST , *PBST;

PBST GetNode(){PBST node = (PBST) malloc (sizeof (BST));node->left = node->right = NULL;return node;

}

Page 63: ▣ 수강동 의

▣ 자료구조 구현

◈ Tree Code (InsertNode 함수 구현 )

void InsertNode(PBST *root , int data){if ((*root) == NULL){

(*root) = GetNode();(*root)->data = data;

}else if ((*root)->data > data )

InsertNode(&(*root)->left, data);else

InsertNode(&(*root)->right, data);}

Page 64: ▣ 수강동 의

▣ 자료구조 구현

◈ Tree Code (main 함수 구현 )

void main (){PBST root = NULL;

InsertNode(&root, 10);InsertNode(&root, 20);InsertNode(&root, 5);InsertNode(&root, 15);

}

Page 65: ▣ 수강동 의

▣ 자료구조 구현

◈ 트리의 순회

A

B C

[ 전위 순회 ](PreOrder)

탐색 :ROOT-> 왼쪽 -> 오른쪽

A

B C

[ 중위 순회 ](InOrder)

탐색 :왼쪽 ->ROOT-> 오른쪽

A

B C

[ 후위 순회 ](PostOrder)

탐색 :왼쪽 -> 오른쪽 ->ROOT

A B C B A C B C A

Page 66: ▣ 수강동 의

▣ 자료구조 구현

◈ 트리의 전위 순회 구현 (PreOrder) : ROOT-> 왼쪽 -> 오른쪽

A

B C

D FE G

③ ④

A B D E C F G

Page 67: ▣ 수강동 의

▣ 자료구조 구현

◈ 트리의 중위 순회 구현 (InOrder) : 왼쪽 ->ROOT-> 오른쪽

A

B C

D FE G①

D B E A F C G

Page 68: ▣ 수강동 의

▣ 자료구조 구현

◈ 트리의 중위 순회 구현 (PostOrder) : 왼쪽 -> 오른쪽 ->ROOT

A

B C

D FE G① ②

④ ⑤

D E B F G C A

Page 69: ▣ 수강동 의

▣ 자료구조 구현

◈ 문제

-. 트리 출력 함수 만들기

Page 70: ▣ 수강동 의

▣ 자료구조 이해

◈ 이진 탐색 트리 (BINARY SEARCH TREE) 삭제

data RightLeft

ROOTDeleteNode(5)

10

20

15

5

Page 71: ▣ 수강동 의

▣ 자료구조 이해

◈ 이진 탐색 트리 (BINARY SEARCH TREE) 삭제

data RightLeft

ROOTDeleteNode(20)

10

20

15

5

Page 72: ▣ 수강동 의

▣ 자료구조 이해

◈ 이진 탐색 트리 (BINARY SEARCH TREE) 삭제

data RightLeft

ROOTDeleteNode(20)

10

20

15

5 15

Page 73: ▣ 수강동 의

▣ 자료구조 이해

◈ 이진 탐색 트리 (BINARY SEARCH TREE) 삭제

data RightLeft

ROOTDeleteNode(10)

10

20

15

5

15

Page 74: ▣ 수강동 의

▣ 자료구조 구현

◈ 문제

-. 트리 삭제 함수 만들기