24

자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작
Page 2: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

자료구조 : 데이터를 구조화하는 수단 자료구조의 유형◦ 배열, 리스트, 스택, 큐, 트리

컴퓨터의 메모리는 셀들로 구성◦ 메모리 셀은 메모리 주소와 내용을 가짐◦ 메모리 주소는 연속적으로 구성됨

컴퓨터배움터 2

Page 3: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

배열◦ 가장 간단한 메모리 자료구조◦ 일련의 연속적인 메모리 셀들로 구성◦ 메모리 셀들은 동질적인 데이터를 저장

유용성◦ 많은 수의 비슷한 항목에 대해서 하나의 변수 이름

컴퓨터배움터 3

Page 4: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

선언(정의) : 데이터 유형과 크기를 제공 Java의 예: int[ ] aGrades = new int[5];◦ “int[ ]”는 컴퓨터에게 배열이 정수를 보관함을 알려줌◦ “aGrades”는 배열의 이름◦ “new”키워드는 새로운 배열이 생성됨을 명세함◦ “int[5]”는 5개의 메모리 장소를 확보함

차원성◦ 차원 : 원소(메모리 셀)의 행/열◦ aGrades는 1차원임(한 줄의 우편함처럼)

1차원 배열의 조작◦ 인덱스 : 접근을 위해 “[]”내에 위치한 정수 예 : aGrades[0] = 50;

◦ 하한값: 영(0)◦ 상한값: 배열의 크기-1 ex) aGrades의 크기 =49

헝가리식 표기법 : “aGrades”를 명명하기 위한 표준

컴퓨터배움터 4

Page 5: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

컴퓨터 배움터 5

[그림 9-6] 모든 원소들이 저장된 배열

Page 6: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

다차원 배열◦ 둘 또는 그 이상의 1차원 배열로 구성됨◦ 각행의 위에 여러 행들이 쌓여 있음 아파트 건물의 우편함

Tic-tac-toe 게임판 정의 : char[ ][ ] aTicTacToe = new char[3][3]; 지정 : aTicTacToe[1][1] = ’X’; ◦ X를 두 번째 행의 두 번째 열에 놓음

3차원 이상의 배열도 가능

컴퓨터배움터 6

Page 7: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

배열의 장점◦ 메모리 셀의 순차 접근을 허용◦ 이름과 데이터를 사용하여 데이터를 검색/저장◦ 구현이 쉬움◦ 프로그램 작성과 판독을 단순화

제약점 및 단점◦ 클래스와 달리 이질적인 항목들을 저장할 수 없음◦ 동적인 메모리 할당 불가능◦ 정렬되어 있지 않은 배열의 탐색은 효율적이지 않음

컴퓨터배움터 7

Page 8: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

리스트 : 동적 자료구조◦ 데이터의 양이 알려져 있지 않거나 변화할 수 있는 경우에 적절함

기본적인 세가지 리스트 형태 :◦ 연결리스트(Linked lists)◦ 스택(Stack)◦ 큐(Queue)

컴퓨터 배움터 8

Page 9: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

연결리스트◦ 가변 데이터 집합을 위해 사용되는 구조◦ 배열과는 달리 데이터를 불연속적으로 저장◦ 데이터와 다음에 연결된 셀의 주소를 관리

연결리스트는 고급자료구조의 기본임◦ 각각의 구조들은 포인터에 기반함

포인터 : 메모리 위치를 가리키는 메모리 변수 예 : 연결리스트 게임

컴퓨터배움터 9

Page 10: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

종이는 두 부분으로 구분된 하나의 노드를 나타냄◦ 데이터(첫 번째 부분, 색상)◦ 포인터 : 다음 위치(학생 ID 번호)

교수의 종이 : 데이터가 없는 head pointer 마지막 학생 : 포인터 값은 NULL임 새로운 원소의 삽입◦ 배열과 달리 크기 조정이 불필요함◦ 데이터와 포인터를 가진 새로운 “종이”를 만듬◦ 새로운 노드(종이)를 수용하도록 포인터를 조정

컴퓨터배움터10

Page 11: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

항목의 삭제를 위해서도 유사한 과정

◦ 목표 항목의 앞에 있는 원소의 포인터를 변경

◦ 원소를 이동시키지 않고 리스트로부터 학생을 제거

동적 메모리 할당

◦ 연결리스트가 배열보다 더 효율적임

◦ 메모리 셀들은 연속적일 필요 없음

컴퓨터배움터11

Page 12: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

스택 : 특별한 형태의 리스트◦ 새 항목의 저장을 위해, 리스트에 “푸시(push)”함◦ 현재항목의 검색을 위해, 리스트로부터 “팝(pop)”함

LIFO 자료구조◦ 스택에 처음 PUSH된 항목이 가장 나중에 POP 됨

Stack Pointer(스택 포인터)는 스택의 top을 나타냄

POP이나 PUSH 연산의 적용 이전에 스택의 상태를 검사

스택의 사용- 함수나 프로시져의 호출

컴퓨터배움터12

Page 13: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

큐 : 다른 유형의 연결리스트◦ 선입선출(FIFO) 저장시스템을 구현◦ 삽입은 큐의 끝에서 이루어짐◦ 삭제는 처음에서 이루어짐◦ 기다리는 줄과 같음

큐의 사용 : 프린터 예◦ 인쇄되는 첫 항목은 가장 오랫동안 기다린 문서임◦ 현재 항목이 큐로부터 삭제된 후 다음 항목이 인쇄됨◦ 새로운 문서는 큐의 끝에 위치함

컴퓨터배움터13

Page 14: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

포인터◦ 헤드 포인터는 큐의 시작을 유지함◦ 테일 포인터는 큐의 끝을 유지함

디큐(dequeue) 연산◦ 큐로부터 항목(가장 오래된 엔트리)을 제거◦ 헤드 포인터는 리스트내에 다음 항목을 가리키도록 변경됨

인큐(enqueue) 연산◦ 리스트의 끝에 항목이 놓여지며, tail 포인터가 변경됨

컴퓨터배움터 14

Page 15: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

트리 : 조직도나 가계도와 유사한 계층 자료 구조◦ 트리내의 각 장소는 노드 또는 점검이라 함

◦ 트리의 시작 노드는 루트라 함

◦ 노드들 사이에는 부모-자식 관계가 있음

◦ 자식이 없는 노드는 리프 노드라 함

◦ 깊이(레벨) : 루트 노드로부터의 거리를 나타냄

◦ 높이 : 최대 레벨 수

컴퓨터배움터 15

Page 16: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

컴퓨터 배움터 16

[그림 9-23] 트리의 노드들

Page 17: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

이진 트리 : 트리의 한 유형◦ 부모 노드는 0, 1 또는 2개의 자식 노드를 가질 수 있음

◦ 자식은 “왼쪽” 또는 “오른쪽” 위치로 구분됨

이진 탐색 트리 : 이진 트리의 한 종류◦ 왼쪽 자식 노드의 데이터 값 < 부모 노드의 값

◦ 오른쪽 자식 노드의 데이터 값 > 부모 노드의 값

이진 탐색 트리는 유용한 탐색 구조임

컴퓨터배움터 17

Page 18: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

컴퓨터 배움터 18

[그림 9-24] 이진 트리의 레벨과 높이

Page 19: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

이진 탐색 트리는 세 요소를 포함

◦ 왼쪽 자식 포인터

◦ 오른쪽 자식 포인터

◦ 데이터

루트 : 트리의 접근을 위한 초기 시작점

컴퓨터배움터 19

Page 20: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

컴퓨터 배움터 20

[그림 9-26] 이진 트리 노드

Page 21: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

탐색 루틴◦ 루트 위치에서 시작◦ 경로가 왼쪽 또는 오른쪽 자식으로 이동하는지 결정◦ 데이터의 방향(왼쪽 또는 오른쪽)으로 이동◦ 값이 발견되면 노드에서 정지하고 호출자에게 반환◦ 값이 발견되지 않으면 자식 노드에 대해서 과정 반복

컴퓨터배움터 21

Page 22: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

정렬된 데이터의 예◦ 사전내의 단어◦ 디렉토리내의 화일◦ 책의 색인

수 많은 정렬 알고리즘 각각의 장단점이 있다.◦ 코드, 공간, 시간 복잡도에 따라 분석됨◦ 예) 선택 정렬과 버블 정렬

컴퓨터배움터 22

Page 23: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

선택 정렬 : 수작업 정렬 과정을 흉내 냄◦ 리스트에서 최소값을 찾음◦ 첫 번째 위치에 있는 항목과 교환◦ 두 번째 위치로 이동◦ 줄어든 리스트(첫 번째 위치가 제외된)를 대상으로 과정반복

◦ 마지막 항목의 바로 이전 항목까지 과정을 진행 선택 정렬은 사용과 구현이 간단

선택 정렬은 큰 리스트에 비효율적

컴퓨터배움터 23

Page 24: 자료구조 데이터를구조화하는수단contents.kocw.net/KOCW/document/2014/deoksung/Yugyeona/9.pdf · 버블: 가장오래된정렬방법중하나 리스트내의마지막원소부터시작

버블 : 가장 오래된 정렬 방법 중 하나◦ 리스트 내의 마지막 원소부터 시작◦ 이 원소의 값을 바로 위 항목의 값과 비교◦ 만일 더 작으면 위치를 변경하고 리스트의 위를 계속함 더 작은 항목이 발견될 때까지 비교를 계속함

◦ 더 작지 않으면 다음 항목을 그 위의 항목과 비교◦ 가장 작은 값이 꼭대기로 올라갈 때까지 검사를 계속함◦ 처음 항목이 제외된 리스트에 대해서 과정 반복

버블정렬은 구현이 단순

버블정렬은 큰 리스트에 비효율적

컴퓨터배움터 24