• 검색 결과가 없습니다.

배열

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)

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

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

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

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

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

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

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

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

버블정렬은 구현이 단순

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

참조

관련 문서

UV를 쪼여줌에 따라 셀 내 PVCN의 광반응 이 진행되어 PVCN 필름의 액정 배향력이 증가하게 되므로 초기 랜덤 배열로 존재하던 액정들이 필름 표면에서 같은 방향으로 늘어서게 되고,

들어온다면 처리하지 못할 것이고 더 작은 입력이 들어온 다면 남은 메모리 공간은 낭비될 것이다... C로

[r]

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

CHAP 3:배열,

CallMe(int a);가 있을 때, 호출 함수가 CallMe(n);으로 호출 호출 함수의 n = 실제 파라미터(Actual Parameter). 피호출 함수의 a = 형식

[r]

CMOS SoC 형태의 위상 배열 시스템을 개발하기 위하여 여러 가지 시스템 아키텍처가 개발 되었으며, 이를 구현하기 위한 CMOS 회로 소자에 대한 연구가