[자료구조] 배열
안녕하세요. 지토우에요.
오늘은 자료구조에서도 배열에 대해 알아볼까요?
사실 배열(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) |
'IT > 자료구조' 카테고리의 다른 글
원형 연결리스트 코드 (0) | 2017.11.23 |
---|---|
[자료구조] malloc을 이용한 더블포인터와 주소 (0) | 2017.09.25 |
[자료구조] 추상 데이터 타입 (0) | 2017.08.01 |
자료구조와 알고리즘 (0) | 2017.08.01 |