[자료구조] - 배열

9999·2023년 1월 25일
0

CS

목록 보기
17/19

배열이란?


  • 인덱스와 원소값의 쌍으로 구성된 집합.
  • 아파트의 호수 "101호, 102호, 103호" 와 같이 '순서'가 특징인 자료구조.

    메모리 공간에 저장되는 순서와 밀접한 관련이 있음.

실제 메모리 주소와 관련있는데 왜 추상 자료형인가?

메모리 주소값은 컴퓨터가 실행될 때 알 수 있기 때문에 추상화된 인덱스 값으로 지정해놓음.

배열과 메모리 주소

var arr = [100, 200, 300, 400, 500];
// 메모리 주소
ooffff00 100
ooffff04 200
ooffff08 300
ooffff0c 400
ooffff10 500
  • 배열이 메모리에 할당된 모습.
// 메모리 주소
ooffff00 100 [0]
ooffff04 200 [1]
ooffff08 300 [2]
ooffff0c 400 [3]
ooffff10 500 [4]
  • 오른쪽 대괄호 숫자가 배열의 물리적인 순서.
  • 개발자가 오른쪽 숫자로 요청하면 컴퓨터는 왼쪽 메모리 주소를 검색해서 값을 가져옴.

배열 구현


배열 생성

void create(int n) {
	int a[n];
    int i;
    for(i=0; i < n; i++) {
    	a[i] = 0; // 초기값 0으로 저장.
    }
}
create(5) // 5칸 배열 생성.
  • 반복문으로 지정한 값까지의 배열 생성.

배열 검색

# define arr_size 5
int retrieve(int *arr, int i) {
	if(i >= 0 && i < arr_size)
    return arr[i];
    else {
    	printf("error.\n");
        return(-1);
    }
}
  • 배열은 0부터 시작하고 최대 사이즈에서 -1을 해야하기 때문에 '0이상이면서 배열크기보다 작은' 조건을 생성.
  • 조건을 벗어나면 에러 발생.

배열값 저장

void store(int *arr, int i, int e) {
	if(i >= 0 && i < arr_size) {
    	arr[i] = e;
    } else printf("error.\n");
}

store(arr, 3, 30); // arr배열 [3]에 값30 저장.
  • 지정된 숫자에 그냥 값을 대입.

    ❕ 3을 지정해서 3번째가 아닌 인덱스i번째에 저장.

0개의 댓글