본문 바로가기

전공 깍두기/데이터 구조 조각

[데이터 구조] 5차시 배열 추상 데이터 타입과 배열의 표현

모듈1. 배열 개요

1) 데이터의 표현

(1) 고급 표현 특징

  • 추상적이고 논리적인 표현
  • 추후 저급의 데이터와 연산자로 구현해야 실행될 수 있음
  • 연산자의 구현은 데이터의 저급 표현 방법에 의존

(2) 저급 표현 방법

  • 순차 표현(sequential representation) = 배열(array)
  • 연결 표현(linked representation) = 연결 리스트(linked list)

 

 

2) 배열이란?

배열
1차원 배열

 

2차원 배열

 

 

모듈2. 배열 추상 데이터 타입

1) 배열과 인덱스

(1) 배열의 정의: 주어진 각 index에 대해 하나의 value가 연관된 <index, value> 쌍들의 집합을 "배열(array)"이라고 한다. (포인터에는 주소만!)

(2) 인덱스(index) = 메모리 안 주소

  • 순서를 나타내는 원소의 유한 집합
  • 집합 내에서의 상대적 위치 식별
  • 원소 수가 한정되어 있고, 항상 마지막 원소가 존재
  • 인덱스만으로 원하는 원소를 직접 접근

(3) 배열(array)의 특성

  • 순차적 메모리 할당 방식
  • <인덱스, 원소 값> 쌍의 집합
    - 상기 각 쌍은, 인덱스그에 대응되는 원소 값(value or item)을 가지므로, 이를 대응 관계라 함
    - 이러한 대응 관계를 correspondence 또는 mapping이라는 용어를 사용함
  • 원소들이 모두 같은 타입, 즉 같은 크기를 가짐(eg: int, 4byte)

 

2) 배열 추상 데이터 타입

(1) 주요 연산자

  • create(): n개의 원소 값을 저장할 수 있는 공백 배열을 생성
  • retrieve(): Array와 Index를 매개변수로 받아 Index에 대응하는 원소값을 찾아 반환하고 없으면 error를 반환
  • store(): Array, Index, Element를 매개 변수로 전달 받아 유효하면 <인덱스, 원소값> 쌍으로 저장하고 Array를 반환

 

(2) 배열 ADT 정의

  • 설명에 포함되어야 하는 "데이터 & 연산들"을 명확하게 정의
  • 꼭 필요한 사항만 요약해서 표현

 

 

 

모듈3. 배열의 표현

1) 1차원 배열

(1) 메모리 표현(memory representation)

  • 연속적인 메모리 주소를 배열에 할당
  • 순차사상(sequential mapping): 배열의 논리적 순서와 메모리의 물리적 순서가 같도록 표현
  • 순차표현(sequential representation): 순차 사상을 이용하여 데이터를 표현(=저장), 원소는 할당된 메모리 내에서 인덱스 순서에 따라 저장
  • 1차원 배열의 순차 표현
    -> a[0]기준 주소가 x이고, 각 원소가 1 byte이면 a[i]의 주소는 x + 1 * i
    -> a[0]기준 주소가 x이고, 각 원소가 c byte이면 a[i]의 주소는 x + c * i

 

(2) C언어에서의 1차원 배열 예

- 정수형(int)은 4byte의 메모리가 할당되고, 문자형(char)은 1byte가 할당됨

- int list[5] : array list는 "정수 변수(int)"를 5개만큼 연속 정의함

- int *plist[5] : "정수 변수의 주소"를 담고 있는 pointer 변수 (int *)를 5개 정의함

 

 

 

2) 2차원 배열

(1) 2차원 배열을 1차원 메모리로 사상

  • 행 우선 순서(row major order): 일반적인 방법
    - 원소를 차례로 접근 시, 항상 행보다 열(column)을 나타내는 인덱스가 먼저 변함
  • 열 우선 순서(column major order): transform 하고 계산

 

행 우선 순서의 표현

 

 

3) 3차원 배열

 

 

 

4) n차원 배열

- Row major order 사용

 

 

 

eg) A[3][4][5]에서 A[2][1][3]의 주소는? a(시작지점) + 4*5*2 + 5*1 + 3

 

 

이거 좀 모르겠음
이것도 모르겠음 ..