03. 배열

2022. 12. 3. 01:42자료구조, 알고리즘

728x90
반응형

(해당 내용은 "C++로 쉽게 플어쓴 자료구조(천인국, 최영규 저, 2016)"을 기반으로 작성되었습니다.)

(해당 내용은 자료구조/알고리즘을 공부하기 위해 작성된 것이므로, 내용에 오류가 있을 수 있습니다.)

 

배열(array)이란?

배열이란 같은 타입의 변수들을 연속적으로 나열한 것으로 정의할 수 있습니다.

 

여기 5개의 정수형 변수가 있다고 가정합시다. 각각의 변수들은 아래와 같은 방법으로 정의할 수 있겠네요.

int a, b, c, d, e;	// 정수형 변수 5개를 각각 선언

위와 같은 방식으로 약 10개 이상의 정수형 변수를 선언한다고 한다면 매우 번거로운 일이 될 것 같습니다.

하지만 여기서 배열을 정의하면 아래와 같이 간단하게 표현할 수 있습니다.

int A[5];	// 5개의 정수를 가지는 배열 선언

여기서 "A"는 배열의 이름이고, [] 안의 숫자 "5"는 배열이 최대로 저장할 수 있는 변수의 개수, 즉 배열의 크기입니다.

이를 정리하면 배열은 아래와 같이 선언할 수 있습니다.

더보기

자료형  배열이름[배열의 크기];

이렇게 배열을 선언하면, 우리는 이 배열에 배열의 크기만큼의 값을 입력할 수 있게 됩니다.

그럼 배열 내부에 존재하는 변수들은 어떻게 표현할 수 있을까요?

A 배열의 내부에는 A[0]부터 A[4]까지 5개의 배열이 존재하며, 여기서 0~4의 값을 배열의 인덱스(index) 번호라고 합니다.

우리는 이 인덱스 번호를 이용하여 배열에 값을 입력하거나 또는 배열의 인덱스 번호를 입력하여 값을 불러올 수 있습니다.

A[0] = 1, A[1] = 2, A[2] = 3, A[3] = 4, A[4] = 5;	// 배열 A에 값을 입력
b = A[2] + A[4];	// 정수형 변수 b에 배열 A의 3번째 값과 5번째 값의 합을 입력

여기서 주의할 점은 배열의 인덱스는 반드시 0부터 시작한다는 점입니다.

그러므로 크기가 n인 배열에 들어갈 수 있는 인덱스는 0부터 n-1까지입니다.

 

배열의 주소

배열 내부에 있는 값들은 모두 연속된 공간에 저장된다는 특징이 있습니다.

크기가 5인 배열 A가 메모리에 존재한다고 가정했을 때, 이를 그림으로 표현하면 다음과 같습니다.

A[0]은 배열 A의 첫 번째 요소이므로, A[0]이 위치하는 주소는 곧 배열 A의 주소라고 볼 수 있습니다.

그리고 다음 배열인 A[1]는 A[0] 바로 뒤에 위치하므로,

A[1]의 주소는 A[0]의 주소에 A[0]이 차지하는 메모리 할당 크기를 더한 것입니다.

(sizeof(자료형) 은 자료형의 크기를 계산하는 함수입니다.)

 

문자열

자료형 char는 단지 "하나의 문자"만을 표현할 때 사용합니다.

그렇다면 여러 문자가 포함된 단어 또는 문장를 표현할 때는 어떻게 할까요?

 

C/C++ 언어에서는 이러한 단어 또는 문장을 "문자열"이라는 하나의 배열로 간주합니다.

예를 들면 이런 식이죠

char c1[] = "Hello";
char c2[] = "Hello C++";

문자형 배열(문자열) c1에는 "Hello"가, c2에는 "Hello C++"이 저장되어 있습니다.

그리고 이들 문자열은 아래와 같은 방식으로 메모리에 저장되어 있습니다.

여기서 '\0'은 문자열의 끝을 나타내는 NULL 문자입니다.

그럼 단어 "Hello"를 표현하기 위해서는 크기가 6인 문자열이 필요하고,

문장 "Hello C++"를 표현하기 위해서는 크기가 9인 문자열이 필요하네요.

결국 단어 또는 문장을 표현하기 위해서는 글자수+공백수+1인 문자열을 생성하여야 한다는 뜻이 됩니다.

아니면 간단하게 "[]"로 표현하는 것도 좋은 방법일 것 같습니다.

 

2차원 배열

C/C++에서 2차원 배열은 1차원 배열의 집합으로 간주하며, 아래와 같이 표현할 수 있습니다.

더보기

자료형 배열이름[행의 크기][열의 크기];

예를 들어 A[4][3]이라는 배열이 있다고 합시다.

4는 행의 크기, 3은 열의 크기이므로, 아래와 같이 표현할 수 있습니다.

크기가 3인 배열이 4개 쌓여 있는 형태로 보면 되겠습니다,

 

728x90
반응형

'자료구조, 알고리즘' 카테고리의 다른 글

05. 포인터  (4) 2022.12.30
04. 클래스  (4) 2022.12.22
02. 알고리즘 시간 복잡도 함수(2)  (1) 2022.11.24
02. 알고리즘 시간 복잡도 함수(1)  (6) 2022.11.16
01. 자료구조와 알고리즘  (3) 2022.11.13