배열은 같은 타입의 변수들로 이루어진 유한 집합으로 정의한다.
배열은 같은 종류의 데이터를 많이 다뤄야 하는 경우에 사용할 수 있는 가장 기본적인 자료구조 이다.
C언어에서 인덱스는 언제나 0 부터 시작하며, 0을 포함한 양의 정수만 가질 수 있다.
배열에서는 동일 타입의 데이터를 저장한다. 배열이 int 타입인 경우 double, float, chat 등과 같은 데이터타입은 저장할 수 없다.
연속된 메모리 공간에 데이터들이 순차적으로 저장된다.
배열의 크기는 10 이므로, 10개의 요소를 저장 할 수 있다.
각 요소는 인덱스를 통해 접근할 수 있다.
배열의 길이를 선언할 때는 반드시 상수 사용
배열 요소의 인덱스는 언제나 0부터 시작
배열의 각 요소에 접근하는 시간은 O(1)로 모두 동일
연속된 메모리에 단일 블록화 하여 데이터를 저장하여, 낭비되는 공간의 거의 없다.
실제 메모리 상에서 물리적으로 데이터가 순차적으로 저장되기 때문에 데이터에 순서가 잇으며 index가 존재하여 인덱싱(indexing) , 슬라이싱(slicing)이 가능하다.
<장점>
인덱스를 이용해 접근이 가능해 빠르게 모든 요소에 접근이 가능하다
공간 낭비가 적다
간단하게 사용하기 쉽다
<단점>
배열 선언 후 할당 된 정적메모리로 크기를 변경 할 수 없다
중간에 특정 요소를 삽입하거나 삭제하는 경우, 배열에서 메모리는 항상 순차적으로 이어져있어야 하기 때문에 삽입, 삭제된 요소로 부터 위에 있는 모든 요소를 이동시켜줘야 한다.
int arr[] = { 1, 2, 3, 4, 5, 6, 7 };
int n = sizeof(arr) / sizeof(arr[0]); // 7
문법 : 타입 배열이름[배열길이] ;
C언어에서 배열을 선언만 하고 초기화하지 않으면, 각 배열 요소에 아무 의미를 가지지 않는 쓰레기값이 저장되어, 꼭 초기화 시켜줘야 한다.
int i;
int sum = 0;
/* 배열의 선언, 초기화 방법 1 */
int grade[3]; // 길이가 3인 int형 배열 선언
grade[0] = 85;
grade[1] = 65;
grade[2] = 90;
/* 배열의 선언, 초기화 방법 2 */
int grade[3] = {85, 65, 90};
for (i = 0; i < 3; i++) {
sum += grade[i]; // 인덱스를 이용한 배열의 접근
}
printf("국영수 과목 총 점수 합계는 %d점이다.", sum);
2차원 배열이란 배열의 요소로 1차원 배열을 가지는 배열이다.
C언어에서는 2차원 배열을 나타내는 타입을 따로 제공하지않는다.
타입 배열이름 [행의길이][열의길이] ;
void leftRotatebyOne(int arr[], int n){
int temp = arr[0], i;
for(i = 0; i < n-1; i++){
arr[i] = arr[i+1];
}
arr[i] = temp;
}
https://gyoogle.dev/blog/computer-science/data-structure/Array.html