• 검색 결과가 없습니다.

배열

N/A
N/A
Protected

Academic year: 2022

Share "배열"

Copied!
24
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)
(2)

자료구조 : 데이터를 구조화하는 수단

자료구조의 유형

◦ 배열, 리스트, 스택, 큐, 트리

컴퓨터의 메모리는 셀들로 구성

◦ 메모리 셀은 메모리 주소와 내용을 가짐

◦ 메모리 주소는 연속적으로 구성됨

(3)

배열

◦ 가장 간단한 메모리 자료구조

◦ 일련의 연속적인 메모리 셀들로 구성

◦ 메모리 셀들은 동질적인 데이터를 저장

유용성

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

(4)

선언(정의) : 데이터 유형과 크기를 제공

Java의 예: int[ ] aGrades = new int[5];

“int[ ]”는 컴퓨터에게 배열이 정수를 보관함을 알려줌

“aGrades”는 배열의 이름

“new”키워드는 새로운 배열이 생성됨을 명세함

“int[5]”는 5개의 메모리 장소를 확보함

차원성

차원 : 원소(메모리 셀)의 행/열

aGrades는 1차원임(한 줄의 우편함처럼)

1차원 배열의 조작

인덱스 : 접근을 위해 “[]”내에 위치한 정수

: aGrades[0] = 50;

하한값: 영(0)

상한값: 배열의 크기-1 ex) aGrades의 크기 =49 : “aGrades”를 명명하기 위한 표준

(5)

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

(6)

다차원 배열

◦ 둘 또는 그 이상의 1차원 배열로 구성됨

◦ 각행의 위에 여러 행들이 쌓여 있음

아파트 건물의 우편함

Tic-tac-toe 게임판

정의 : char[ ][ ] aTicTacToe = new char[3][3];

지정 : aTicTacToe[1][1] = ’X’;

◦ X를 두 번째 행의 두 번째 열에 놓음

3차원 이상의 배열도 가능

(7)

배열의 장점

메모리 셀의 순차 접근을 허용

이름과 데이터를 사용하여 데이터를 검색/저장

구현이 쉬움

프로그램 작성과 판독을 단순화

제약점 및 단점

클래스와 달리 이질적인 항목들을 저장할 수 없음

동적인 메모리 할당 불가능

정렬되어 있지 않은 배열의 탐색은 효율적이지 않음

(8)

리스트 : 동적 자료구조

◦ 데이터의 양이 알려져 있지 않거나 변화할 수 있는 경우 에 적절함

기본적인 세가지 리스트 형태 :

◦ 연결리스트(Linked lists)

◦ 스택(Stack)

◦ 큐(Queue)

(9)

연결리스트

◦ 가변 데이터 집합을 위해 사용되는 구조

◦ 배열과는 달리 데이터를 불연속적으로 저장

◦ 데이터와 다음에 연결된 셀의 주소를 관리

연결리스트는 고급자료구조의 기본임

◦ 각각의 구조들은 포인터에 기반함

포인터 : 메모리 위치를 가리키는 메모리 변수

예 : 연결리스트 게임

(10)

종이는 두 부분으로 구분된 하나의 노드를 나타냄

데이터(첫 번째 부분, 색상)

포인터 : 다음 위치(학생 ID 번호)

교수의 종이 : 데이터가 없는 head pointer

마지막 학생 : 포인터 값은 NULL임

새로운 원소의 삽입

배열과 달리 크기 조정이 불필요함

데이터와 포인터를 가진 새로운 “종이”를 만듬

새로운 노드(종이)를 수용하도록 포인터를 조정

(11)

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

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

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

동적 메모리 할당

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

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

(12)

스택 : 특별한 형태의 리스트

새 항목의 저장을 위해, 리스트에 “푸시(push)”함

현재항목의 검색을 위해, 리스트로부터 “팝(pop)”함

LIFO 자료구조

스택에 처음 PUSH된 항목이 가장 나중에 POP 됨

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

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

(13)

큐 : 다른 유형의 연결리스트

선입선출(FIFO) 저장시스템을 구현

삽입은 큐의 끝에서 이루어짐

삭제는 처음에서 이루어짐

기다리는 줄과 같음

큐의 사용 : 프린터 예

인쇄되는 첫 항목은 가장 오랫동안 기다린 문서임

현재 항목이 큐로부터 삭제된 후 다음 항목이 인쇄됨

새로운 문서는 큐의 끝에 위치함

(14)

포인터

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

◦ 테일 포인터는 큐의 끝을 유지함

디큐 (dequeue) 연산

◦ 큐로부터 항목(가장 오래된 엔트리)을 제거

◦ 헤드 포인터는 리스트내에 다음 항목을 가리키도록 변경 됨

인큐 (enqueue) 연산

◦ 리스트의 끝에 항목이 놓여지며, tail 포인터가 변경됨

(15)

트리 : 조직도나 가계도와 유사한 계층 자료 구조

◦ 트리내의 각 장소는 노드 또는 점검이라 함

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

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

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

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

◦ 높이 : 최대 레벨 수

(16)

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

(17)

이진 트리 : 트리의 한 유형

◦ 부모 노드는 0, 1 또는 2개의 자식 노드를 가질 수 있음

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

이진 탐색 트리 : 이진 트리의 한 종류

◦ 왼쪽 자식 노드의 데이터 값 < 부모 노드의 값

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

(18)

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

(19)

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

◦ 왼쪽 자식 포인터

◦ 오른쪽 자식 포인터

◦ 데이터

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

(20)

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

(21)

탐색 루틴

루트 위치에서 시작

경로가 왼쪽 또는 오른쪽 자식으로 이동하는지 결정

데이터의 방향(왼쪽 또는 오른쪽)으로 이동

값이 발견되면 노드에서 정지하고 호출자에게 반환

값이 발견되지 않으면 자식 노드에 대해서 과정 반복

(22)

정렬된 데이터의 예

◦ 사전내의 단어

◦ 디렉토리내의 화일

◦ 책의 색인

수 많은 정렬 알고리즘 각각의 장단점이 있다 .

◦ 코드, 공간, 시간 복잡도에 따라 분석됨

◦ 예) 선택 정렬과 버블 정렬

(23)

선택 정렬 : 수작업 정렬 과정을 흉내 냄

◦ 리스트에서 최소값을 찾음

◦ 첫 번째 위치에 있는 항목과 교환

◦ 두 번째 위치로 이동

◦ 줄어든 리스트(첫 번째 위치가 제외된)를 대상으로 과정 반복

◦ 마지막 항목의 바로 이전 항목까지 과정을 진행

선택 정렬은 사용과 구현이 간단

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

(24)

버블 : 가장 오래된 정렬 방법 중 하나

리스트 내의 마지막 원소부터 시작

이 원소의 값을 바로 위 항목의 값과 비교

만일 더 작으면 위치를 변경하고 리스트의 위를 계속함

더 작은 항목이 발견될 때까지 비교를 계속함

더 작지 않으면 다음 항목을 그 위의 항목과 비교

가장 작은 값이 꼭대기로 올라갈 때까지 검사를 계속함

처음 항목이 제외된 리스트에 대해서 과정 반복

버블정렬은 구현이 단순

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

참조

관련 문서

유체는 점성유체로 평상시에는 평범한 점성유체 이지만, 여 기에 전기, 자기장을 걸어주게 되면 유체 내부의 입자들이 규칙적으로 배열 하기 때문에 고체처럼

 이들은 동일한 이름을 가지고 있으며, 단지 괄호 안의 첨자 (subscript)만 다르다.. 첨자가 배열

- 함수의 인자로 배열이 전달되면 배열의 기본 주소가 (배열의 내용이 아님) call-by-value로 전달됨...

 person이라는 구조체를 만들어보자. 이 구조체에는 문자 배열로 된 이름, 사람의 나이를 나타내는 정수값, 각 개인 의 월급을 나타내는 float값 등이 변수로

문자열 name과 같은 이름을 가진 인수 값을 배열 형태로 가져 옴 checkbox, multiple list 등에

궤도채우기 – 에너지가 증가하는 순서로 부준위

CHAP 3:배열,

▪ 문법과 배열의 결속, 문장의 체계적인 배열, 문장의 긴밀한 결속 등 을 글을 마무리 짓는 순간까지 계속해서 점검해야 함..