[자료구조] 2. 순차 자료구조와 배열(Array)

iamnhn·2023년 11월 27일

자료구조

목록 보기
2/2
post-thumbnail

참고도서 : C로 배우는 쉬운 자료구조(4판) 한빛출판네트워크 이지영 2021

Goal

  • Array를 이해하고 Array의 구현 방법을 이해한다.
  • Array의 선언 방법을 이해한다.
  • 동적 배열과 정적배열의 특징과 차이에 대해 이해한다.

1. 배열이란?

같은 자료형을 가진 자료들을 나열하여 메모리에 연속적으로 저장하여 만든 자료의 그룹
모든 자료형에 대해 배열 구성이 가능하며, 형태에 따라 고차원 배열을 정의할 수 있음

2. 배열의 구성

Array Elements :

배열 구조에서 각각의 데이터 아이템(요소)을 가리키는 용어

Array Indexes :

배열의 요소를 간단히 구별하기 위해 사용하는 번호 인덱스는 항상 0으로 시작한다.(C, C++ Java등의 경우에 한함)

3. 배열 선언 형식

배열을 선언하는 형식은 아래와 같다.

자료형 배열이름 [배열요소의 개수];

Java 에서는 아래와 같다.

int[] numArray = new int[5];

4. 정적 배열

고정된 크기를 가지며, 컴파일 타임에 크기가 결정되는 배열
즉, 미리 배열의 크기를 지정하고 선언하는 것

주요 특징

  • 고정된 크기 : 정적 배열은 선언할 때 크기가 결정됨
  • 고정된 메모리 사용 : 크기가 고정되어 있기 떄문에 할당된 메모리를 계속 사용하게 됨

사용 예시

  • 고정된 크기의 데이터를 저장해야 하는 경우
  • 배열의 크기가 변경되지 않으며 메모리 사용량이 고정되어야 하는 경우
  • 원소를 추가하거나 제거하지 않고, 빠른 검색이 필요한 경우

단점

  • 배열 크기를 변경하려면 '새로운 배열을 생성'하고 데이터를 복사해야 하므로 비효율적임
public class ResizeStaticArrayExample {
    public static void main(String[] args) {
        int[] staticArray = new int[5]; // 크기가 5인 정적 배열 생성

        // 원소 추가
        staticArray[0] = 10;
        staticArray[1] = 20;
        staticArray[2] = 30;
        staticArray[3] = 40;
        staticArray[4] = 50;

        System.out.println("현재 배열 크기: " + staticArray.length);

        // 크기 변경 (더 큰 크기로)
        int newSize = 10;
        int[] newStaticArray = new int[newSize];
        System.arraycopy(staticArray, 0, newStaticArray, 0, staticArray.length);
        staticArray = newStaticArray;

        System.out.println("재할당 후 배열 크기: " + staticArray.length);

        // 크기 변경 (더 작은 크기로)
        int smallerSize = 3;
        int[] newSmallerStaticArray = new int[smallerSize];
        System.arraycopy(staticArray, 0, newSmallerStaticArray, 0, smallerSize);
        staticArray = newSmallerStaticArray;

        System.out.println("더 작은 크기로 재할당 후 배열 크기: " + staticArray.length);
    }
}

5. 동적 배열

동적 배열은 원소를 추가하거나 삭제할 때 크기를 동적(자동)으로 조정할 수 있는 데이터 구조이다.

주요 특징

  • 크기 조절 : 동적 배열은 원소를 추가할 때 현재 크기를 초과하는 경우 자동으로 더 큰 메모리 공간을 할당하고 원래 데이터를 복사하여 새로운 공간에 저장한다.
  • 시간 복잡도 : 동적 배열은 원소 삽입, 삭제, 검색의 평균 시간 복잡도가 상수 시간에 가깝지만, 크기 조절이 필요한 경우 모든 원소를 한칸씩 뒤로 옮기거나 땡겨야 하므로, O(n)의 시간이 걸릴 수 있다.

사용 예시

  • 배열의 크기가 동적으로 변경되어야 하는 경우
    (원소를 자주 추가하거나 제거 해야 할때)

  • 메모리 사용량을 효율적으로 관리해야하는 경우

    단점

  • 원소를 임의로 검색할 때 시간이 더 걸릴 수 있음 (원소를 추가하거나 제거할 때 내부에서 원소의 위치가 변경되기 떄문)

0개의 댓글