배열?
동일한 타입의 데이터들을 한번에 여러개 만드는 방법.
ex. 정수를 6개 저장할 공간을 생성한다고 할 때, 기본적인 방식으로는
int i1, i2, i3, i4, i5, i6;
와 같은 형식으로 변수들을 선언한다. 하지만 배열을 사용한다면
int i[6];
와 같이 간단하게 선언할 수 있다.
따라서 배열은 동일한 데이터 타입을 여러 개 다뤄야 할 때 유용하게 쓰인다.
배열은 [인덱스, 값] 형태의 쌍들로 이루어진 집합이라고 볼 수 있다.
인덱스가 주어지면 그 인덱스에 해당되는 요소가 대응되기 때문에 배열에서는 인덱스 번호를 통해 값을 참조한다.
인덱스 번호를 통해 값에 쉽게 접근이 가능하기 때문에 반복루프를 사용하여 여러 작업을 할 수 있다.
2차원 배열
int i[3][3]; // 2차원배열명[행 크기][열 크기]
이와 같이 선언하여
행/열 | 0열 | 1열 | 2열 |
0행 | i[0][0] | i[0][1] | i[0][2] |
1행 | i[1][0] | i[1][1] | i[1][2] |
2행 | i[2][0] | i[2][1] | i[2][2] |
위와 같은 2차원 배열을 상성할 수 있다.
2차원 배열의 세로줄을 열(column), 가로줄을 행(row)라고 부른다.
구조체?
배열이 동일한 타입의 데이터들을 묶는 방법이었다면,
구조체는 타입이 다른 데이터들을 하나로 묶는 방법이다.
ex. 학생의 정보를 나타내는 구조체를 만들어보자.
학생의 정보에는 이름, 학번, 성적 등 여러가지 정보들이 있다.
이름은 문자열로, 학번, 성적은 정수나 실수형으로 값을 저장해야 하는데, 배열을 같은 타입의 데이터들만 묶을 수 있기 때문에 사용하기 힘들다.
이를 해결하기 위해서 구조체를 사용한다.
struct StudentInfo {
char name[10]; // 이름을 저장할 문자열.
int number; // 학번을 저장할 정수형 변수
double score; // 성적을 저장할 실수형 변수
};
이와 같이 StudentInfo 라는 태그(tag)의 구조체 형식을 정의할 수 있다.
태그는 각 구조체들을 식별할 수 있도록 식별자 역할을 한다. (구조체 형식의 이름이라고 생각)
위와 같이 정의한 구조체 형식을 사용하여 구조체를 만들려면
struct StudentInfo st1;
이와 같이 struct 뒤에 태그, 선언할 구조체 이름을 붙여서 구조체 변수를 선언한다.
이렇게 구조체를 선언하고나서 구조체 내부의 멤버들(여러 타입의 변수들)에 접근할 수 있다.
구조체 멤버들에 접근하기 위해서는 멤버연산자(membership operaor)인 '.'을 사용한다.구조체 변수 뒤에 '.'을 붙이고 접근할 멤버(항목)이름을 붙인다.
strcpy(st1.name, "Park");
st1.number = 2020;
st1.score = 4.2;
이와 같이 멤버들에게 접근하고 사용할 수 있다.
C언어에서는 typdef 를 사용하여 구조체를 타입으로 선언 할 수 있다.
typedef StudentInfo {
char name[10]; // 이름을 저장할 문자열.
int number; // 학번을 저장할 정수형 변수
double score; // 성적을 저장할 실수형 변수
} student;
이와 같이 student 라는 타입을 선언하였다.
이렇게 타입을 선언하였다면 student 만을 사용하여 구조체 변수를 선언 할 수 있다.
student st1;
'Data Structure' 카테고리의 다른 글
계수 정렬 (Counting sort) (2) | 2023.11.08 |
---|---|
자료구조와 알고리즘, 복잡도 분석 (0) | 2021.07.23 |