[Data structures] 배열(Array)과 리스트(List)

임수정·2024년 7월 10일
0

📝 Learning Log

목록 보기
33/47
post-thumbnail

📍 배열(Array)

동일한 데이터 타입의 요소들을 순차적으로 저장할 수 있는 선형 데이터 구조이다. 각 요소는 인덱스(index)라고 불리는 숫자로 접근할 수 있다.

📖 특징

고정된 크기 : 배열은 생성할 때 크기를 지정하며, 그 크기는 일반적으로 변경할 수 없다.

인덱스 기반 접근 : 배열의 각 요소는 0부터 시작하는 인덱스를 통해 접근할 수 있다.

동일한 데이터 타입 : 배열은 한가지 데이터 타입으로 이루어져야하며, int/double/boolean이나 참조 모두 배열의 요소가 될 수 있다.

메모리 상 연속적인 할당 : 배열은 메모리 상에 연속적으로 요소들이 할당된다. 이는 인덱스를 통한 빠른 접근을 가능하게 한다.

정적인 구조 : 배열의 크기는 생성할 때 결정되며, 실행 중에는 크기를 동적으로 변경할 수 없다. 필요한 경우 새로운 배열을 생성하고 데이터를 복사해야 한다.

📍 리스트(List)

데이터 요소들을 순서대로 저장하는 선형 데이터 구조이다. 리스트는 배열과 비슷하지만 차이점이 있다.

📖 특징

동적 크기 : 리스트는 크기가 동적으로 조절될 수 있다. 즉, 요소를 추가하거나 삭제할 때마다 크기가 자동으로 조절된다. 이는 배열과 달리 초기에 크기를 지정할 필요가 없다는 뜻

원소 타입 자유로움 : 일반적으로 리스트는 같은 데이터 타입의 요소들을 저장하지만, 몇몇 프로그래밍 언어에서는 서로 다른 타입의 요소를 저장할 수 있는 리스트도 지원된다.

인덱스 기반 접근 : 리스트의 각 요소는 인덱스를 사용하여 접근할 수 있다. 일반적으로 0부터 시작하는 인덱스를 사용하며, 리스트의 특정 위치에 있는 요소를 빠르게 접근할 수 있다.

Linked List와 Array List : 리스트는 구현 방식에 따라 다양할 수 있다. 연결 리스트는 각 요소가 자신의 다음 요소를 가리키는 포인터를 가지며, 배열 리스트는 내부적으로 배열을 사용하여 요소를 저장

📍 배열과 리스트 차이점

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

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

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


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

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

📁 차이점

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

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

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


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

배열을 사용할 예시
① 데이터의 크기가 고정되어 있고, 변경될 일이 없는 경우 : 배열의 크기가 고정되어 있으므로, 변경되지 않는 크기의 데이터를 다룰 때 적합

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

리스트(List)를 사용할 상황 예시
① 데이터의 크기가 불확실하거나 가변적인 경우 : 리스트는 크기가 가변적이기 때문에, 크기가 불확실하거나 자주 변경되는 데이터를 다룰 때 적합

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

벡터(Vector)를 사용할 상황 예시
① 데이터의 크기가 가변적이면서 빠른 인덱스 기반 접근이 필요한 경우 : 벡터는 동적 배열로서 크기가 가변적이면서 인덱스 기반 접근이 빠르다. 따라서, 이러한 요구 사항이 있는 경우에 적합

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

profile
언어는 거들 뿐...

0개의 댓글