2022. 12. 3. 01:42ㆍ자료구조, 알고리즘
(해당 내용은 "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개 쌓여 있는 형태로 보면 되겠습니다,

'자료구조, 알고리즘' 카테고리의 다른 글
| 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 |