배열(Array)과 리스트(List)

나무에물주기·2023년 5월 5일
3
post-thumbnail

배열(Array)과 리스트(List)의 기본 개념

배열(Array)과 리스트(List)는 프로그래밍에서 자주 사용되는 자료 구조로, 여러 개의 데이터를 저장할 수 있다. 그러나 이 두 자료 구조는 사용 방법과 특성이 다르다.

배열(Array)

배열은 동일한 자료형의 원소들을 연속적인 메모리 공간에 저장하는 자료 구조이다. 배열의 크기는 고정되어 있으며, 선언 시에 크기를 지정해야 한다.

#include <iostream>

int main() {
    int numbers[5] = {1, 2, 3, 4, 5};

    for (int i = 0; i < 5; i++) {
        std::cout << numbers[i] << std::endl;
    }
    return 0;
}

리스트(List)

리스트는 원소들을 연결하여 저장하는 자료 구조이다. 원소의 개수가 가변적이며, 삽입과 삭제가 자유롭다. C++에서는 std::list와 std::forward_list를 사용할 수 있다.

#include <iostream>
#include <list>

int main() {
    std::list<int> numbers = {1, 2, 3, 4, 5};

    for (int number : numbers) {
        std::cout << number << std::endl;
    }
    return 0;
}

배열과 리스트의 차이점

  1. 메모리 할당: 배열은 연속적인 메모리 공간에 할당되고, 리스트는 비연속적인 메모리 공간에 할당된다.

  2. 크기: 배열은 크기가 고정되어 있으며, 리스트는 가변적이다.

  3. 접근 방법: 배열은 인덱스를 통한 빠른 접근이 가능하지만, 리스트는 순차적으로 접근해야 한다.

  4. 삽입과 삭제: 배열은 삽입과 삭제가 번거롭고 시간이 오래 걸리지만, 리스트는 삽입과 삭제가 빠르다.


추가적인 비교: 벡터(Vector)와 리스트(List)

벡터(Vector)는 동적 배열로, 배열의 단점을 보완한 자료 구조이다. 크기가 가변적이며, 빠른 인덱스 접근이 가능하다. 리스트와의 차이점은 메모리 할당 방식과 접근 방법에 있다.

  1. 메모리 할당: 벡터는 연속적인 메모리 공간에 할당되고, 리스트는 비연속적인 메모리 공간에 할당된다.

  2. 접근 방법: 벡터는 인덱스를 통한 빠른 접근이 가능하지만한 반면, 리스트는 순차적으로 접근해야 한다.

  3. 삽입과 삭제: 벡터는 중간에 원소를 삽입하거나 삭제할 때 원소들을 이동해야 하므로 시간이 오래 걸릴 수 있지만, 리스트는 삽입과 삭제가 빠르다.

  4. 메모리 효율: 벡터는 메모리를 미리 할당하여 사용하지 않는 공간이 발생할 수 있으나, 리스트는 필요한 만큼의 메모리만 사용한다.

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5};

    for (int number : numbers) {
        std::cout << number << std::endl;
    }
    return 0;
}

각 자료구조의 사용 상황 예시

배열(Array)을 사용할 상황 예시

  1. 데이터의 크기가 고정되어 있고, 변경될 일이 없는 경우: 배열의 크기가 고정되어 있으므로, 변경되지 않는 크기의 데이터를 다룰 때 적합하다.

  2. 빠른 인덱스 기반 접근이 필요한 경우: 배열은 연속적인 메모리 공간에 저장되어 있어 인덱스를 통한 접근이 빠르다. 따라서, 특정 위치의 데이터에 빠르게 접근해야 할 때 유용하다.

리스트(List)를 사용할 상황 예시

  1. 데이터의 크기가 불확실하거나 가변적인 경우: 리스트의 크기는 가변적이기 때문에, 크기가 불확실하거나 자주 변경되는 데이터를 다룰 때 적합하다.

  2. 데이터의 삽입과 삭제가 빈번한 경우: 리스트는 삽입과 삭제가 빠르기 때문에, 데이터를 자주 추가하거나 삭제해야 하는 경우에 유용하다.

벡터(Vector)를 사용할 상황 예시

  1. 데이터의 크기가 가변적이면서 빠른 인덱스 기반 접근이 필요한 경우: 벡터는 동적 배열로서 크기가 가변적이면서 인덱스 기반 접근이 빠르다. 따라서, 이러한 요구 사항이 있는 경우에 적합하다.

  2. 데이터의 삽입과 삭제가 빈번하지 않은 경우: 벡터는 중간에 원소를 삽입하거나 삭제할 때 원소들을 이동해야 하므로 시간이 오래 걸릴 수 있다. 그러나, 삽입과 삭제가 빈번하지 않은 경우에는 벡터의 사용이 적절하다.


요약

  1. 배열과 리스트는 프로그래밍에서 자주 사용되는 자료 구조로, 여러 개의 데이터를 저장할 수 있다.

  2. 배열은 연속적인 메모리 공간에 할당되어 인덱스를 통한 빠른 접근이 가능하지만 크기가 고정되어 있고, 삽입과 삭제가 번거롭다. 중간에 원소를 삽입하거나 삭제할 때, 나머지 원소들을 이동해야 하기 때문이다.

  3. 리스트는 비연속적인 메모리 공간에 할당되어 순차적으로 접근해야 하지만 크기가 가변적이고, 삽입과 삭제가 빠르다. 원소들이 연결된 포인터를 수정하기만 하면 되기 때문이다.

  4. 벡터는 동적 배열로, 배열의 단점을 보완한 자료 구조로 크기가 가변적이며, 빠른 인덱스 접근이 가능하다.

profile
개인 공부를 정리함니다

0개의 댓글