DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트,...

45
DATA ABSTRACTION Jo, Heeseung

Transcript of DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트,...

Page 1: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

DATA ABSTRACTION

Jo, Heeseung

Page 2: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

2

이번 chapter에 다루는 것들

9.1 기본 자료구조

• 9.1.1 배열, 집합체, 연결 리스트, 스택, 큐, 트리, 자료구조의 조작

9.2 맞춤형 자료구조

• 사용자정의 자료형, 추상 자료형

Page 3: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

9.1 기본 자료 구조

Page 4: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

4

기본 자료 구조

배열

집합체

리스트(List)

• 스택(Stack)

• 큐(Queue)

트리(Tree)

Page 5: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

5

배열

배열(Array)

• 그 안의 항목들이 모두 동일한 타입인 "직사각형" 모양의 데이터 블록

• 2차원 배열 : 행과 열로 이루어짐

• 항목의 위치는 인덱스(index)로 표시

대부분의 고급 언어가 지원

예: 숫자 10개 int L[10];실수형 8×8 행렬 float M[8][8];

Page 6: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

6

배열

왜 필요한가? 없다면?

• 변수 이름(variable name)이 복잡해져야

• 루프(loop)로 일을 처리하기 힘들다

for (i=0; i<n; i++)sum = sum + L[i];

sum = sum + L0;sum = sum + L1;sum = sum + L2;. . .

L0, L1, L2, L3, ...

Page 7: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

7

배열

배열의 단점

• 각 배열 요소의 크기와 전체 모양(shape)이 변하지 말아야 함

• 배열 요소 하나의 추가와 삭제가 어렵다

- L[2]와 L[3] 사이에 새로운 값 추가 : L[3] 이후는 한 칸씩 뒤로

- L[4]제거 : L[5] 이후는 한 칸씩 앞으로

Page 8: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

8

배열의 저장

배열(array)

• 정적 : 데이터가 갱신되어도 배열의 크기는 변하지 않음

• 메모리 주소 x에 저장된 배열 예:

int arr[7];

Page 9: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

9

배열의 저장

배열로의 접근 : 연산자

• 배열의 세 번째 항목에 접근하여 이곳에 0을 저장하도록 요청하려면?

메모리의 실제 접근을 위한 주소 : 번역기가 수행함

• 번역기는 0이라는 값을 주소가 x + (3 - 1)인 메모리 셀에 저장하기위한 기계 명령들을 만들어냄

- x : 배열 arr이 저장된 블록의 첫 번째

• 이를 일반화하면?

arr[2] = 0;

x + (i – 1) // 1차원 배열에서 i번째 위치에 있는 메모리의 주소

Page 10: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

10

배열의 저장

행들과 열들로 이루어지는 2차원 배열

배열의 저장방식

• 행 우선 순서(row major order) : 배열을 행 단위로 저장

• 열 우선 순서(column major order) : 배열을 열 단위로 저장

• 행 우선순위로 저장된 2차원 배열 예

Page 11: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

11

배열의 저장

4행 5열의 행 5열의 2차원 배열 예

2차원 배열의 접근 및 데이터 할당 예

번역기에서의 메모리 주소 계산

• x + (5 x (3 - 1)) + (4 - 1)

• 이를 일반화하면?

int arr2D[4][5];

arr2D[2][3] = 7;

// 2차원 배열에서 배열의 각 행 안의 항목수가 c이고,i번째 행과 j번째 열의 위치에 있는 메모리의 주소

x + (c x (i – 1)) + (j – 1)

Page 12: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

12

집합체

집합체(aggregate)

• 타입과 크기가 다를 수도 있는 데이터 항목들의 블록

• 각 항목은 필드(field)라고 불림

• 필드에 대한 접근은 이름을 통해 이루어짐

• C의 structure

Page 13: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

13

집합체

집합체 타입 Employee

메모리의 연속된 블록에 저장된 집합체 Employee

struct{char Name[25];int Age;float SkillRating;

}Employee;

Page 14: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

14

집합체

별도의 장소에 저장된 집합체 Employee

포인터를 사용하는 방식은 집합체 필들의 크기가 동적일 경우 유용

• 필요한 크기의 메모리 영역만 찾는 것이 가능

• 포인터를 새로 찾은 영역의 주소로 변경함으로써 첫 번째 필드의 크기를쉽게 증가시킬 수 있음

struct{char *Name;int *Age;float *SkillRating;

}Employee;

Employee.Name = malloc(20);Employee.Age = malloc(4);

Employee.Name = malloc(40);

Page 15: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

15

포인터

대전제 :

• 주기억장치의 어느 위치든지 주소(address)로 찾아갈 수 있다

포인터(Pointer)

• 주소를 값으로 갖는 메모리 영역

• 데이터 항목이 저장되어 있는 메모리 위치를 기록하기 위해 사용

Page 16: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

16

포인터

제목 순으로 배열되어 있고 저자에 따라 링크로 연결된 소설들

• 포인터를 통해 특정 작가가 지은 소설들을 고리 모양으로 연결

struct novel {char *name;struct novel *next;

};

Page 17: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

17

정적 구조와 동적 구조

정적 자료 구조(Static Data Structures)

• 자료구조의 크기와 형태가 변하지 않음

• 필요기능 : 접근, 변경

• 예 : array

동적 자료 구조(Dynamic Data Structures)

• 자료 구조의 크기와 형태가 변할 수 있음

• 필요기능 : 접근, 변경, 항목 추가, 삭제, 데이터 구조 확장에 따른메모리공간의 확보

• 예 : linked list

포인터(pointer) : 데이터의 위치를 가리키기 위해 사용됨

Page 18: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

18

리스트 – 연속형리스트

리스트 : 항목을 순차적으로 배열하는 데이터 집합

연속형리스트(contiguous list)

• 배열처럼 연속된 주소를 갖는 메모리 셀 블록에 저장

• 삽입과 삭제가 빈번한 동적 리스트의 경우 불리

• 예: 연속형 리스트로 메모리에 저장되어 있는 이름들

char novel[8][100];

Page 19: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

19

리스트 – 연결리스트

연결리스트(linked list)

• 리스트 전체를 하나의 연속된 큰 블록에 저장하는 대신 리스트 상의개별 항목들을 각기 다른 메모리 영역에 저장

• 항목들이 포인터로 연결되는 리스트

• (데이터 + 포인터)로 구성

- 포인터 값: 리스트의 다음 항목의 주소

- 헤드 포인터(head pointer) : 리스트의 시작

- NULL 포인터 (0) : list의 끝을 표시하기 위해 사용되는 특별한 비트패턴

• 삽입이나 삭제로 인한 문제가 간단해 짐

Page 20: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

20

리스트 – 연결리스트

연결 리스트의 구조

연결리스트에서 항목 삭제

struct novel {char *name;struct novel *next;

};

Page 21: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

21

리스트 – 연결리스트

연결 리스트에서 항목 삽입

Page 22: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

22

유휴공간 수집 : 가비지 컬렉션

연결 리스트에서 삭제된 것들은?

• 해제시켜 주어야 함

• C에서는 free() (<malloc.h>)

가비지 컬렉션(garbage collection)

• 필요없게 된 메모리들을 관리하고,나중에 재사용 하도록 하는 방법

메모리 누수(memory leak)

• garbage collection 실패로 사용 못하는 메모리

Page 23: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

23

Stack structure

Stack

Page 24: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

24

스택

스택(stack) : 항목들에 대한 제거와 삽입이 헤드에서만 일어나는리스트

• LIFO: Last-in-first-out (후입선출)

- 저장된 순서와 반대의 순서로 꺼내야 할 항목들을 저장할 때 이상적

• 스택 포인터(Stack pointer) : 항목 위치를 나타냄

• Pop: stack 상단에서 항목을 제거

• Push: stack 상단에 항목을 삽입

Page 25: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

25

큐(queue) : 항목들에 대한 제거는 head에서 일어나고 삽입은 tail에서이루어지는 리스트

• 자료의 삽입은 한 쪽 끝에서만

• 삭제는 반대쪽 끝에서만

• FIFO : first-in, first-out(선입선출)

- 실생활에서의 예: 줄서기

Page 26: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

26

헤드 포인터와 테일 포인터를 사용한 큐의 구현

Page 27: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

27

큐의 저장에서의 문제점

• 항목들을 삽입하고 삭제하다 보면 큐가 메모리에서 계속 이동하게 됨

• 큐가 정해진 메모리 블록을 벗어나지 않도록 만드는 메커니즘이 필요!

해결방법 : 순환형 큐(circular queue)

• 큐가 블록 안에서 이동하도록 허용

- 큐의 테일이 블록의 끝에 도달했을 경우,추가 항목들을 다시 블록의 앞에서부터 채워나감

- 큐의 헤드가 블록의 마지막 항목이고 이 항목이 제거될 경우,헤드 포인터는 다시 블록의 시작부분을 가리키도록 조정

Page 28: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

28

P에서 V까지의 문자들을 담고 있는 순환형 큐

Page 29: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

29

트리

트리(tree): 항목들이 계층적 구성을 갖는 데이터 집합

• 일반 회사의 조직도 예:

Page 30: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

30

트리

트리 관련 용어

• 노드(node): tree 안의 항목

• 루트 노드(root node): 최상단의 node

• 단말 노드(terminal 또는 leaf node): 하단의 node

• 깊이(depth) : tree 내에서 가장 긴 경로의 길이

• 레벨(level) : root로부터의 거리

• 서브트리(subtree) : tree의 일부, 역시 tree

depth

subtree

level 0

level 3

root node

leaf node

Page 31: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

31

트리

하나의 node를 기준으로

• 부모(parent): 지정된 node 바로 위의 node

• 자식(child): 지정된 node 바로 아래 node

• 조상(ancestor): 부모, 부모의 부모, ...

• 후손(descendent): 자식, 자식의 자식, ...

• 형제(sibling): 공통의 부모를 갖는 node들

node

parent

children

sibling

ancestor

descendent

Page 32: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

32

이진 트리

이진 트리

• 각 노드가 2개 이하의 자식을 갖는 트리

• 연결 리스트와 유사한 연결 구조 사용하여 메모리에 저장

- 노드 = 데이터 셀 + 두 개의 자식 포인터

- 루트 노드에 대한 포인터를 통해 접근

<이진트리에서의 노드 구조>

struct NODE { int data; struct NODE *left; struct NODE *right;

};

Page 33: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

33

이진 트리의 저장

연결 구조를 사용한 이진트리의 개념적 구조와 실제 구조

Page 34: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

34

이진 트리의 저장

포인터를 사용하지 않고 저장된 트리(1)

• 연속형 리스트 사용

• 이진트리가 거의 균형을 갖추고 있고, 거의 가득 차 있을 때 효율적

Page 35: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

35

이진 트리의 저장

포인터를 사용하지 않고 저장된 트리(2)

• 엉성하고 균형을 못 갖춘 트리의 개념적 구조와 포인터를 사용하지않았을 때의 메모리 구조

• 메모리의 낭비 문제

Page 36: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

36

자료구조의 조작

컴퓨터 메모리에 자료구조를 저장하는 방식

• 사용자가 생각하는 개념적 구조와 일치하지 않음

• 2차원 동질성 배열의 경우 -> 실제로 2차원의 직사각형 블록에 저장되지않음

• 리스트나 트리도 -> 실제로는 큰 메모리 영역에 흩어져 있을 수 있음

Sales[3][4] = 67;

Page 37: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

37

자료 구조의 조작

이상적으로는, 자료 구조에 대한 모든 조작은 사전 정의된 프로시저에의해 조작

• 예: 보통, 스택은 최소한 push 프로시저와 pop 프로시저를 필요로 함

• 이러한 프로시저들을 갖춘 데이터 구조는 완전한 추상적 도구를 형성

일단 해당 프로시저가 개발되면 해당 자료 구조를 조작하기 위해 실제필요한 단계들에 신경쓰지 않고 해당 프로시저를 추상적 도구로 사용

• Stack에 데이터를 넣고 빼는 것은 push / pop 함수만 부르면 됨

추상화 도구(Abstract Tool)

• 주기억장치는 list, stack, queue 등으로 구성되어 있는 것이 아니라주소(address)를 지정할 수 있는 메모리 셀(cell)의 열로 구성

• array, list, stack, queue, tree 등의 구조들은 실제 저장장치의세부사항을 신경 쓰지 않고 보다 편리한 형식으로 정보가 저장되어 있는것처럼 이용할 수 있게 해주는 추상적 도구

Page 38: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

38

자료 구조의 조작

연결 리스트를 인쇄하기 위한 프로시저 예 :

• 프로시저가 일단 개발되면, 리스트를 인쇄하기 위해 실제로 필요한단계들에 신경쓰지 않고 이 프로시저를 연결리스트를 인쇄하기 위한추상도구로 이용할 수 있다.

procedure PrintList (List)

CurrentPointer <- List의 헤드 포인터

while (CurrentPointer가 NIL이 아님) do (

CurrentPointer가 가리키는 항목 안의 이름을 인쇄한다

CurrentPointer가 가리키는 List 항목의 포인터 셀의 값으로

CurrentPointer의 값을 변경한다

)

Printlist(SoftClassList)

Page 39: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

9.2 맞춤형 자료형

Page 40: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

40

사용자정의 자료형

새로운 자료형 정의를 위해 집합체 구조 사용 - C 언어 예

변수 정의에 새로운 자료형 사용

struct EmployeeType

{

char Name[25];

int Age;

real SkillRating;

};

struct EmployeeType Manager, Sales;

Page 41: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

41

추상 자료형

추상 자료형 = 클래스(Class)

• 데이터(표현)와 함수(동작) 모두를 포함할 수 있는 사용자정의 자료형

• C++, C#, Java: class

Page 42: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

42

객체지향 프로그래밍에서의 Stack 기능 구현

Stack 클래스

• 멤버 변수 : 값이나 상태 정보

- m_size : 스택의 크기

- m_top : 스택의 톱, 데이터를 꺼낼 위치

- m_buffer : 데이터를 저장할 공간, 동적할당

• 메소드(멤버 함수) : 연산이나 처리 함수

- void Initialize(int size) : 스택의 초기화

- bool Push(int value) : 데이터 value를 저장

- bool Pop(int value) : 데이터 value를 를 꺼내옴

- void Removeall() : 모든 데이터 삭제

Page 43: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

43

Stack을 예로 본 클래스와 객체

Page 44: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

44

절차적 프로그래밍에서의 Stack 기능 구현

Stack 구조체

• size : 스택의 크기, 정수형

• top : 데이터를 꺼낼 위치, 스택의 톱, 정수형

• buffer : 데이터를 저장할 공간, 동적할당, 정수 포인터

Stack 구조체를 이용하여 Stack의 기능을 구현

struct Stack {int size;int top;int *buffer;

}

Stack의 기능 함수의 프로토타입 함수 설명

스택의 초기화 void Initialize(Stack& s, int size)스택의 size, top 초기화

메모리 공간 확보 및 초기화

데이터를 저장 bool Push(Stack& s, int value) 스택에 데이터 value를 집어넣음

데이터를 꺼냄 bool Pop(Stack& s, int value)스택의 top위치에서 데이터 value를꺼냄

모든 데이터 삭제 void RemoveAll(Stack& s) 스택에 있는 모든 데이터 삭제

Page 45: DATA ABSTRACTION - CBNU · 9.1 기본자료구조 • 9.1.1 배열, 집합체, 연결리스트, 스택, 큐, 트리, 자료구조의조작 ... 트리 트리(tree): 항목들이계층적구성을갖는데이터집합

45

클래스의 정의

C++로 구현한 Stack 클래스