배열

JngHoon_2·2022년 10월 11일
0

자료구조

목록 보기
4/10

배열의 개념

배열(array)은 거의 모든 프로그래밍 언어에서 기본적으로 지원된다. 배열은 기본이 되는 중요한 자료형으로 많은 고급 자료구조들에서 사용된다. 배열은 주로 여러 개의 동일한 자료형의 데이터를 한꺼번에 만들 때 사용된다.

int a1, a2, a3, a4, a5; // 6개의 정수형 변수를 각각 선언 
int A[5]; // 5개의 정수형 변수를 선언

여러 개의 변수를 사용하는 것은 각각을 다른 이름으로 접근해야 하므로 연산이나 자료의 교환 등에서 많은 불편함이 따른다. 이런 경우에 배열을 사용하면 편리하다.
배열은 동일한 이름을 사용하고 인덱스(index) 번호로 각 항목을 접근할 수 있다. 특히 반복문을 활용하여 코드의 길이를 크게 줄일 수 있다.

배열의 가장 기본적인 특징은 <인덱스, 요소> 쌍의 집합이라는 것이다. 즉, 인덱스가 주어지면 해당하는 요소가 대응되는 자료구조이다. 배열에서는 모든 요소가 동일한 자료형이며, 인덱스를 사용하여 요소를 직접 접근(direct access)할 수 있다.
배열과 대응되는 개념으로는 순차 접근(sequential access) 방식인 연결 리스트가 있다.

배열의 추상 자료형

객체<인텍스, 요소>쌍의 집합
연산create(n): n개의 요소를 가진 배열을 생성한다.
retrieve(i): 배열의 i번째 요소를 return한다.
store(i, item): 배열의 i번째 위치에 item을 저장한다.

1차원 배열

1차원 배열을 선언하는 방법은 다음과 같다.

자료형 배열이름[배열의 크기]; // <주의!> 선언 방법은 언어에 따라 다를 수 있음.

  • 자료형: 배열 요소들의 자료형. 모든 요소들은 같은 자료형으로 만들어진다.
  • 배열이름: 배열의 요소에 접근할 수 있는 유일한 이름.
  • 배열의 크기: 배열 요소의 개수를 나타내는 정수. 배열 요소의 인덱스는 0 부터 배열 크기 - 1이 된다.

※ 배열에서의 요소들은 모두 메모리의 연속된 공간에 저장된다

문자열(특별한 1차원 배열)

문자열은 1차원 배열의 한종류로 char 형의 요소를 갖는 배열을 의미한다. 하나의 문자는 작은따옴표를 이용하여 표현한다. 문자열은 모은 단어는 큰 따옴표를 사용하여 나타낸다. 문자열을 저장하기 위해서는 char 형 1차원 배열을 사용한다.

예를 들어 문자 배열을 "I Love You"로 초기화하면

char a[12] = "I Love You";

이와 같은 문자열 a에 대한 메모리 구조는 다음과 같다.

끝에는 a[10]과 같이 반드시 문자열의 끝을 나타내는 NULL문자 '\0'이 있어야 한다.
a[1]과 a[6]는 공백문자 ' '를 나타내는데 이것도 문자열의 일부분일 뿐이다. 따라서 a는 NULL 값이 나오기 바로 전까지인 "I Love You"를 나타내는 문자열임을 명심해야한다.

2차원 배열

2차원 배열은 1차원 배열이 여러 개 모여서 이루어진다. 2차원 배열에서 가로줄을 행(row), 세로줄을 열(column)이라고 한다. 2차원 배열은 다음과 같이 선언한다.

자료형 배열이름[행의 크기][열의 크기];
// <주의!> 선언 방법은 언어에 따라 다를 수 있음.

  • 배열이름: 2차원 배열의 이름
  • 행의 크기: 2차원 배열의 가로줄의 개수.
  • 열의 크기: 2차원 배열의 세로줄의 개수.

함수의 파라미터로서의 배열

함수 안에서 파라미터로 배열을 받아서 배열의 내용을 수정하면 원래의 배열이 수정된다.
사실 배열의 이름은 포인터 역할을 한다. 즉, 배열의 이름을 전달하면 배열의 포인터(첫 번째 항목의 주소)가 전달되는 것이나 마찬가지이다. 따라서 배열을 함수의 파라미터로 전달 받을 때는 항상 조심해야한다. 다음 프로그램을 참고하자.

#include <iostream> 
using std::cout; 
using std::endl;

#define MAX_SIZE 10 

// 배열을 파라미터로 받는 함수 
void sub(int x, int arr[]) 
{ 
	x = 10; 
    	arr[0] = 10; 
} 

// 주 함수
void main() 
{ 
	int var; 
    	int list[MAX_SIZE]; 
	var = 0; 
    	list[0] = 0; 
	sub(var, list); 
	cout << "var= " << var << "list[0]= " << list[0] << endl; 
}

위 프로그램의 출력은 var= 0, list[0]= 10 이다.
값에 의한 호출(call - by - call)을 참고 및 이해한다면 쉽게 연산될 것이다.

profile
주니어 AOS/iOS 개발자를 꿈꾸는 학생입니다🐤

0개의 댓글