amugona study 1회

27
Data Structures amugona study 1 회 20150717 mjh

Upload: who7117

Post on 18-Aug-2015

29 views

Category:

Software


3 download

TRANSCRIPT

Data Structuresamugona study 1 회

20150717 mjh

레코드• 데이터 원소의 크기와 데이터 형태가 서로 다른 데이터 구조

레코드 1 레코드 2 레코드 3

필드 1-1

필드 1-2

필드 1-3

필드 2-1

필드 2-2

필드 2-3

필드 3-1

필드 3-2

필드 3-3

레코드필드문자 화일 데이터베이스

레코드 - 표현• 레코드들을 이질적 데이터 구조라고 부르는 것에서 알 수 있듯이

레코드 원소들은 배열의 형태로 저장되지 않는다 .

고정 길이 레코드 가변 길이 레코드

길이에 따른 분류

고정 길이 레코드

struct Deposit {char branch_name[20];int account_number;char

customer_name[20];float balance;

};

모든 자료형을 계산해보면 Deposit 레코드는 46byte 를 사용한다 .

고정 길이 레코드

명 동 10102 이향종 400

안 암 10101 김선희 700

안 암 10305 김영호 520

구 로 20215 장양호 350

강 남 20110 유희상 900

잠 실 20201 양금숙 600

20byte 20byte 20byte 20byte

customer_name

branch_name

account_number

balance위치

0

1

2

3

4

5

중간의 레코드가 삭제되면 삭제된 기억 공간을 이용하기 위한 문제 발생

명 동 10102 이향종 400

삭제된 레코드안 암 10305 김영호 520

구 로 20215 장양호 350

강 남 20110 유희상 900

잠 실 20201 양금숙 600

20byte 20byte 20byte 20byte

customer_name

branch_name

account_number

balance위치

0

1

2

3

4

5

고정 길이 레코드

2

명 동 10102 이향종 400

5

안 암 10305 김영호 520

구 로 20215 장양호 350

잠 실 20201 양금숙 600

포인터

0

1

2

3

4

5

6

헤더

삭제된 기억 공간의 포인터를 저장하는 레코드를 추가

고정 길이 레코드

- 고정 길이 레코드에 대한 삽입과 삭제는 삭제된 레코드의 기억 장소가레코드의 삽입에 필요한 기억 장소와 일치하므로 구현하기가 간단하다 .

- 그러나 파일 내에 가변 길이의 레코드를 허용하면 이 방법은 부적합

- 삽입될 레코드는 삭제된 레코드가 차지하던 기억 장소의 양이 부족하거나남게 되는 경우가 있기 때문

가변 길이 레코드• 한 파일 내에 여러 유형의 레코드 저장• 한 파일 내에 가변 필드를 허용하는 레코드 저장• 반복적 필드를 허용하는 레코드 저장

struct deposit_list {

char branch_name[20];

struct{

int account_number;

char customer_name[20];

float balance;

} *account_info;

};

레코드의 크기를 제한하지 않기 위해서 사용

가변 길이 레코드• 구현 기법

• 바이트 스트링 표현 : 레코드 끝 기호 ㅗ를 첨가• 삭제된 레코드의 기억 공간을 재사용하기가 쉽지 않다 .

• 크기가 증가하는 레코드에 대해서는 기억 장소 할당이 어렵다 .

• 고정 길이 레코드의 이용• 예약 기억 장소 기법• 포인터 기법

명 동 10102

이향종 400 ㅗ

안 암 10101

김선희 700 10305

구 로 20215

장양호 305 ㅗ

강 남 20110

유희상 900 ㅗ

잠 실 20201

양금숙 600 ㅗ

김영호 520 ㅗ

바이트 스트링 표현

가변 길이 레코드• 구현 기법

• 바이트 스트링 표현 : 레코드 끝 기호 ㅗ를 첨가• 삭제된 레코드의 기억 공간을 재사용하기가 쉽지 않다 .

• 크기가 증가하는 레코드에 대해서는 기억 장소 할당이 어렵다 .

• 고정 길이 레코드의 이용• 예약 기억 장소 기법• 포인터 기법

예약 기억 공간 기법을 이용한 상태

명 동 10102

이향종 400 ㅗ ㅗ ㅗ

안 암 10101

김선희 700 10305

김영호 520

구 로 20215

장양호 350 ㅗ ㅗ ㅗ

강 남 20110

유희상 900 ㅗ ㅗ ㅗ

잠 실 20201

양금숙 600 ㅗ ㅗ ㅗ

가변 길이 레코드• 구현 기법

• 바이트 스트링 표현 : 레코드 끝 기호 ㅗ를 첨가• 삭제된 레코드의 기억 공간을 재사용하기가 쉽지 않다 .

• 크기가 증가하는 레코드에 대해서는 기억 장소 할당이 어렵다 .

• 고정 길이 레코드의 이용• 예약 기억 장소 기법• 포인터 기법

포인터 기법을 이용한 상태

명 동 10102

이향종 400

2 안 암 10101

김선희 700

안 암 10305

김영호 520

구 로 10215

장양호 350

강 남 20110

유희상 900

잠 실 20201

양금숙 600

같은 지점에 대한 레코드를 연결하는데 포인터 사용

레코드 - C 언어

Jusorok person, employee;

struct jusorok {int number;char name[20];char addr[100];char tel[13];

} person, employee;

- 선언employee.number = 1;employee.name = “Moon_G”;employee.addr = “Busan”;employee.tel = “123-4567”;

person = employee; // 치환가능

- 참조

레코드 - C 언어

struct jusorok {int number;char name[20];char addr[100];char tel[13];

};struct jusorok person[100];

- 배열

struct jusorok {int number;char name[20];char addr[100];char tel[13];

} person[100];

number name addr tel

person[0] person[100]

중첩된 레코드• 레코드 내의 필드가 다른 레코드로 구성

레코드 1

레코드 2

멤버 1

필드 1

필드 2-1

필드 2-2

멤버 1

필드 1

필드 2-1

필드 2-2

멤버 1-1

멤버 1-2

멤버 2-1

멤버 2-2

- 레코드 1. 멤버 1;- 레코드 1. 필드 1. 멤버 1-1;- 레코드 2. 필드 2-2;

리스트• 선형 리스트 (linear list)

• 각 데이터가 배열과 같이 연속되는 기억 장소에 순차적으로 저장되는 리스트

월 요 일

화 요 일

수 요 일

목 요 일

금 요 일

토 요 일

0

1

3

4

5

6

선형 리스트• 저장 , 탐색 , 삭제 , 삽입 , 변경 등을 수행 가능• 일반적인 표현 방법 : 배열• 각각의 항목들에 대해 index 를 사용하여 접근 ( 포인터 x)• 리스트 구조에서 요구되는 연산

• 리스트의 길이를 구하는 연산• 리스트를 왼쪽에서 오른쪽 또는 그 반대로 읽는 연산• i 번째 항목에 새로운 값을 기억시키는 연산• i 번째 위치에 새로운 항목 a 를 삽입시키는 연산• i 번째 위치에 항목 a 를 삭제시키는 연산

전체 리스트의 순서를 유지하는 작업요구

선형 리스트• 항목 삭제

A

B

C

D

E

A

B

D

E

C 를 삭제 후 다시 채우기 위해 n– k 번의 항목 이동이 수행되어야 함리스트 길이 n 은 하나 감소한다 .

• 항목 삽입

A

B

D

E

A

B

C

D

E

C 를 삽입하기 위해 이동이 3 번 이루어진다 .n 개의 리스트 , k 번째 삽입 : n – k + 1이후 리스트 길이 n 값은 하나 증가한다 .

선형 리스트• 선형리스트의 장점은 가장 간단한 데이터 구조라는 것과 기억 장소의 효율을

나타내는 메모리 밀도가 1 로서 다른 어떤 데이터 구조보다 뛰어나다고 할 수 있다 .• 메모리 밀도 : 일정 크기의 기억 장소에 얼마나 많은 데이터가 저장될 수 있는가 하는 조밀성을

계산하는 식

• 위와 같은 장점에도 불구 , 데이터 항목을 추가할 경우 연속되는 기억 장소가 없으면 처리가 불가능하며 , 선형 구조를 유지하면서 데이터 항목을 추가 , 삭제해야 하므로 빈번한 삽입 , 삭제가 발생될 경우 데이터 이동으로 인한 처리 속도의 저하라는 단점을 갖게 된다 .

단순 연결 리스트• 연속된 항목들이 기억 장소 내에서는 어디에 저장되어 있어도 무방• 링크 : 다음 항목의 주소나 위치에 대한 정보를 갖는 포인터• 노드 : 리스트의 한 항목

Data1 P1 Data2 P2 Datan Pn…

데이터 링크

노드

단순 연결 리스트• 기본 연산

• 단순 연결 리스트의 노드 생성• 단순 연결 리스트의 노드 삽입• 단순 연결 리스트의 노드 삭제

1) 단순 연결 리스트의 노드 생성- 기억 장소의 순서대로 위치하지 않고링크라는 필드를 이용하여 리스트 원소들의 순서를 나타냄- 링크의 값은 다음 노드를 가리키는 포인터이다 .- T : 리스트 출발을 표시하기 위한 변수 포인터- 마지막 원소의 링크 필드 : NULL ( 백슬래시로 표시 )

D5D4

D2D6

D1D3

51

8

42

데이타 링크주소123456789

7T

연결된 리스트 ( 기억 장소 내의 표현 )

단순 연결 리스트• 생성 알고리즘

• 가용 기억 공간 중에서 리스트에 연결할 수 있게 노드를 하나 얻어내는 GetNode() 함수• 현재 포인터 X 가 가리키는 노드가 삭제 등의 조작으로 인해 더 이상 필요 없게 되었을 때 그 노드를

가용 기억 공간 (storage pool) 에 반납하는 RET(X) 함수

struct datanode {char data[3];struct datanode *link;

};

ex) 연결 리스트에 대한 노드의 데이터 형태가 datanode 라고 할 때 , 그 구조체는 다음과 같이 정의

데이터 필드

변수 f 가 위 데이터 형태의 한 노드를 가리키는 포인터일 경우의 정의struct datanode *f;

f→data[0], f →data[1], f →data[2], f →link

f 에 의해 지칭된 노드의 각 필드는 다음과 같은 형식으로 참조될 수 있음

f.data

f

f.data[0]

f.data[1]

f.data[2]

f.link

단순 연결 리스트• 삽입 알고리즘

Data i P i

Datanew Pnew

Data i+1Pi+

1

ai ai+1

anew

• 삭제 알고리즘

Data i-1 Pi-1 Datai Pi Data i+1Pi+

1

ai-1 ai+1ai

* 기억 장소를 최소한 하나 이상의 링크 필드와 항목들을 갖는 노드들로 나눌 수 있는 방법* 사용되고 있는 노드와 사용되고 있지 않는 노드들을 구별할 수 있는 방법* 사용 기억 공간과 가용 공간 사이에 노드를 전송할 수 있는 방법

연결된 스택과 큐데이터 링크

.

.

연결된 스택

데이터 링크

front rear

연결된 큐

- n 개의 스택과 m 개의 큐를 연결 리스트를 이용하여 동시에 구성할 경우 ,초기 조건과 경계 조건 그리고 알고리즘을 사용하면 동시에 구성 가능

기억 공간 관리• 가용 기억 공간

• 현재 사용되고 있지 않는 모든 노드들을 포함• 비 순차적 사상에 따라 연결된 기억 장소를 할당할 때 해결해야 될 문제

• 어떻게 노드를 구성해야 하는가• 어떤 노드가 가용 기억 공간으로 반납되어야 하는가

• 초기 가용 노드의 생성• 가용 노드의 획득• 삭제 노드의 반환

그래프• 수학자 오일러가 퀘닉스버그 다리 문제를 해결하는데 사용 .

• 퀘닉스버그 다리 문제• 어느 한 육지를 출발하여 모든 다리를 단 한번씩 경유하여 다시 출발점으로 되돌아올 수 있는가 하는 문제

각 지역을 정점으로 ,다리를 간선으로 정의

그래프 G 는 하나 이상의 정점 혹은 노드들의 집합 V 와 두 정점의 쌍으로 구성되는 간선들의 집합 E 로 이루어짐정의

http://newdle.noonnoppi.com/xmlView.aspx?xmldid=25474

그래프• 종류

• 무방향 그래프• 간선을 나타내는 정점 쌍에 순서가 없다 .

• 방향 그래프• 간선이 방향성을 지니므로 정점 쌍에 나타난 정점의 순서가 중요하다 .

• 혼합그래프

V1

V2

(a)

V1

V2

(b)

V1

V2

(c)

1

2

(d)

3

4

그래프• 종류• 다중 그래프• 단순 그래프• 가중 그래프