본문 바로가기

IT/자료구조

[자료구조] 배열

[자료구조] 배열

 

안녕하세요. 지토우에요.

오늘은 자료구조에서도 배열에 대해 알아볼까요?

사실 배열(array)은 거의 모든 프로그래밍 언어에서 기본적으로 제공되는 데이터 타입입니다.

C언어를 배우신 분은 거기서도 배우셨을거에요.



 

1. 배열의 개념

 

배열(array)을 사용하면 인덱스(index) 번호를 기준으로 작업을 할 수 있기 때문에 인덱스 번호에 따라

효율적으로 루프를 설정해 여러 상황에서 간단한 코드를 이용해 결과를 나타낼 수 있습니다.

즉, 효율적으로 프로그램을 작성할 수 있다는 것이지요.

 

또, 배열의 가장 기본적인 특징은 배열은 <인덱스, 요소> 쌍의 집합이라는 것인데요.

인덱스가 주어지면 해당하는 요소(element)가 대응되는 자료 구조입니다.

배열에서는 인덱스를 사용해 요소에 직접 접근합니다.

 

우리는 앞서 추상 데이터 타입 ADT 을 배웠는데요.

배열이 기본적으로 제공되지 않았다고 할 때 배열을 추상 데이터 타입으로 정의해 볼까요?

객체 : <인덱스, 요소> 쌍의 집합

연산 : create(n) :: = n개의 요소를 가진 배열의 생성

   retrieve(A,i) ::= 배열 A의 i번째 요소 반환

   store(A,i,item) ::= 배열 A의 i번째 위치에 item 저장

 

보통 c언어에서는 배열이 기본적으로 제공됩니다만, 그렇지 않을 경우 프로그래머가 구현해야 하겠지요.

 

 

 

2. 1차원 배열

 

c언어에서의 1차원 배열에 대해 배워봅시다!

간단한 정수 배열은 다음과 같습니다.

 

int A[4];

 

C언어에서 배열의 인덱스는 0부터 시작한다는 것은 꼭 기억해두세요.

위의 선언에서 배열의 첫번째 요소는 A[0]이고 마지막 요소는 A[3]겠지요. (0,1,2,3 이렇게 4개이니 3이 마지막!)

 

 

배열은 메모리의 연속된 위치에 구현됩니다.

첫번째 배열 요소인 A[0] 의 주소가 기본주소가 되고 다른 요소들의 주소는 다음과 같습니다.

배열의 요소 

메모리 주소 

 A[0] 

기본주소 = base 

 A[1] 

base +  1*sizeof(int)

A[2]

 base +  2*sizeof(int)

A[3]

 base +  3*sizeof(int)