배열(Array)

Dayon·2023년 2월 4일
0

자료구조

목록 보기
8/10

📡 배열 이론

배열 (array) 이란?

배열은 같은 타입의 변수들로 이루어진 유한 집합으로 정의한다.

배열은 같은 종류의 데이터를 많이 다뤄야 하는 경우에 사용할 수 있는 가장 기본적인 자료구조 이다.

  • 배열 요소(element) : 배열을 구성하는 각각의 값
  • 인덱스(index) : 배열에서의 위치를 가르치는 숫자

  • C언어에서 인덱스는 언제나 0 부터 시작하며, 0을 포함한 양의 정수만 가질 수 있다.

  • 배열에서는 동일 타입의 데이터를 저장한다. 배열이 int 타입인 경우 double, float, chat 등과 같은 데이터타입은 저장할 수 없다.

  • 연속된 메모리 공간에 데이터들이 순차적으로 저장된다.

  • 배열의 크기는 10 이므로, 10개의 요소를 저장 할 수 있다.

  • 각 요소는 인덱스를 통해 접근할 수 있다.


배열의 특징

  • 배열의 길이를 선언할 때는 반드시 상수 사용

  • 배열 요소의 인덱스는 언제나 0부터 시작

  • 배열의 각 요소에 접근하는 시간은 O(1)로 모두 동일

  • 연속된 메모리에 단일 블록화 하여 데이터를 저장하여, 낭비되는 공간의 거의 없다.

  • 실제 메모리 상에서 물리적으로 데이터가 순차적으로 저장되기 때문에 데이터에 순서가 잇으며 index가 존재하여 인덱싱(indexing) , 슬라이싱(slicing)이 가능하다.

<장점>

  • 인덱스를 이용해 접근이 가능해 빠르게 모든 요소에 접근이 가능하다

  • 공간 낭비가 적다

  • 간단하게 사용하기 쉽다

<단점>

  • 배열 선언 후 할당 된 정적메모리로 크기를 변경 할 수 없다

  • 중간에 특정 요소를 삽입하거나 삭제하는 경우, 배열에서 메모리는 항상 순차적으로 이어져있어야 하기 때문에 삽입, 삭제된 요소로 부터 위에 있는 모든 요소를 이동시켜줘야 한다.


배열이 차지하는 메모리 크기

  • 배열이 차지하는 총 메모리 크기 = 배열의 길이 X sizeof (타입)
  • 배열의 길이 = sizeof(배열 이름) / sizeof(배열 이름[0])
    int arr[] = { 1, 2, 3, 4, 5, 6, 7 }; 
    int n = sizeof(arr) / sizeof(arr[0]); // 7


🕰️ 배열 실습

[C언어] 1차원 배열

  • 문법 : 타입 배열이름[배열길이] ;

  • 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);

[C언어] 2차원 배열

2차원 배열이란 배열의 요소로 1차원 배열을 가지는 배열이다.

C언어에서는 2차원 배열을 나타내는 타입을 따로 제공하지않는다.

  • 문법 : 타입 배열이름 [행의길이][열의길이] ;

[C++] 회전 알고리즘

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;
}
  • 인덱스에 값을 저장해 arr[0] ~ arr[n-1] 을 각각 arr[1] ~ arr[n]의 값을 주고, arr[n]에 temp 값을 넣어주어 원하는 만큼 회전을 시킬 수있다.



🔗 참조한 사이트

https://gyoogle.dev/blog/computer-science/data-structure/Array.html

https://yoongrammer.tistory.com/43

http://www.tcpschool.com/c/c_array_twoDimensional

profile
success is within reach, allow yourself time

0개의 댓글