[자료구조] 배열 (Array)

soso·2023년 10월 4일
0


출처: https://www.geeksforgeeks.org/array-data-structure/

배열이란?

번호(인덱스)와 번호에 대응하는 데이터들로 이루어진 자료 구조를 나타낸다. 일반적으로 배열에는 같은 종류의 데이터들이 순차적으로 저장되어, 값의 번호가 곧 배열의 시작점으로부터 값이 저장되어 있는 상대적인 위치가 된다.

배열의 주요 특징

  • 인덱스
    배열의 각 요소는 0부터 시작하는 인덱스를 가지며, 이를 사용하여 특정 요소에 접근할 수 있습니다.

    • 예) 첫 번째 요소는 인덱스 0에, 두 번째 요소는 인덱스 1에 위치
  • 크기 고정
    배열은 생성할 때 크기가 고정되며, 이 크기는 변경할 수 없습니다. 만약 더 많은 요소를 저장해야 한다면 새로운 배열을 생성하고 데이터를 복사해야 합니다.

  • 동일한 자료형 요소
    배열은 동일한 자료형의 요소만을 저장합니다. 예를 들어, 정수형 배열은 정수만을 저장합니다.

  • 연속된 메모리 공간
    배열의 각 요소는 메모리에서 연속된 위치에 저장되므로 인덱스를 이용해 빠르게 요소에 접근할 수 있습니다.


배열의 종류

정적 배열 (Static Array)

정적 배열은 프로그래밍에서 사용되는 기본적인 데이터 구조 중 하나이다.
고정된 크기의 연속적인 메모리 블록을 사용하여 데이터를 저장하고 생성 후에는 크기를 변경할 수 없다.

장점과 단점

정적 배열은 메모리 할당 및 해제에 대한 오버헤드가 없으며, 인덱스를 사용하여 빠르게 요소에 접근할 수 있는 장점이 있다.

그러나 크기가 고정되어 있기 때문에 배열이 선언될 때 크기를 알아야 하며, 실행 중에 크기를 동적으로 조정할 수 없는 단점도 있다.


동적 배열 (Dynamic Array 또는 가변 배열)

동적 배열은 배열의 크기를 동적으로 조정할 수 있는 데이터 구조이다.
크기가 부족할 때 자동으로 조정되며, 메모리를 재할당하여 데이터를 저장한다. 유연성을 제공하지만 메모리 재할당과 데이터 복사에 따른 오버헤드가 있다.
('오버헤드(Overhead)' 추가적인 비용, 시간, 또는 자원 소비를 의미)

장점과 단점

동적 배열의 장점은 크기를 동적으로 조절할 수 있어 유연하며, 필요한 메모리만 할당하여 메모리 효율성이 높다.
또한, 요소의 삽입 및 삭제가 용이하며 효율적으로 이루어진다.

하지만 단점으로는 크기를 조절할 때마다 메모리 재할당과 데이터 복사로 인한 오버헤드가 발생하며, 반복적인 크기 조절으로 메모리 조각화 문제가 발생할 수 있다.
또한, 정적 배열에 비해 인덱스 접근에 약간의 오버헤드가 있다.


다차원 배열(Multidimensional array)

둘 이상의 차원을 가지는 배열로, 2차원 배열부터 시작하여 3차원, 4차원 등으로 확장될 수 있습니다.

주요특징

차원(Dimensionality)

  • 1차원 배열은 단일 행으로 이루어져 있음.
  • 2차원 배열은 행과 열로 이루어져 있음.
  • 3차원 배열은 행, 열, 면으로 이루어져 있음.
  • n차원 배열은 n개의 차원으로 이루어져 있음

인덱스(Indexing)

  • 각 차원은 개별적인 인덱스를 가짐.
  • 1차원 배열에서는 단일 인덱스로 요소에 접근.
  • 2차원 배열에서는 행과 열의 두 인덱스로 요소에 접근.
  • 3차원 배열에서는 세 개의 인덱스로 요소에 접근.

크기(Size)

  • 각 차원은 특정 크기를 가짐.
  • 배열의 크기는 각 차원의 크기들의 조합으로 결정됨.

정적 배열 (Static Array)

프로그래밍에서 사용되는 기본적인 데이터 구조 중 하나입니다.
이는 일정한 크기의 연속된 메모리 블록을 사용하여 데이터를 저장하는 방식이다. 정적 배열은 한 번 생성되면 크기를 변경할 수 없다.

정적 배열은 선언 시에 크기를 명시하고, 컴파일 시에 메모리에 할당된다. 이러한 배열은 크기가 고정되어 있어 추가나 삭제가 어렵다.
또한, 정적 배열의 요소에 접근할 때 인덱스를 사용하여 접근한다.

장점과 단점

메모리 할당 및 해제에 대한 오버헤드가 없으며, 빠른 속도로 요소에 접근할 수 있는 장점이 있다.

그러나 크기가 고정되어 있어 유연성이 부족하며, 크기를 동적으로 변경할 수 없는 단점도 있다.

profile
오늘의 기록

0개의 댓글