배열이란?
- 배열은 연속적인 메모리 상에 동일한 데이터 타입의 요소들을 순차적으로 일렬로 저장하는 자료구조.
- 순차적으로 나열된 배열요소는 각 요소마다 인덱스가 붙는다. ex) x[0], x[1]....
- 배열의 크기는 고정적이다.
- 배열 인덱스를 사용할 경우 배열요소에 즉시 엑세스할 수 있다.
배열의 차원(Dimension)
- 한 배열요소를 선택하기 위해 사용하는 인덱스의 수
- C#은 32차원 배열까지 지원한다.
가변 배열(Jagged Array)
- 배열의 요소가 배열타입인 경우
ex) x[0] = new int[2];
x[1] = new int[6]{1, 2, 3, 4, 5, 6};
x[2] = new int[3]{9, 8, 7};
동적 배열 (Dynamic Array)
- 정적 배열은 초기화 시 지정한 고정크기를 계속 유지하는 배열
- 배열을 확장하거나 축소하는 기능을 갖는 배열을 동적배열이라 한다.
동적 배열
public static class DynamicArray
{
private static object[] arr = new object[0];
public static void Add(object element)
{
// 기존 배열 크기보다 1이 더 큰 임시 배열 생성
var temp = new object[arr.Length + 1];
for (int i = 0; i < arr.Length; i++)
{
// 임시 배열에 요소 복사
temp[i] = arr[i];
}
// 임시 배열을 기존 배열에 할당
arr = temp;
// 배열 마지막 인덱스에 새 배열요소 추가
arr[arr.Length - 1] = element;
}
}
고찰
위와 같은 방식은 배열을 동적으로 증가시키는 방식으로 필요한 공간만 사용한다는 장점이 있지만, 매번 새로운 배열 공간을 생성하고 여기에 기존 배열요소들을 전부 복사해야 한다는 단점이 있다. => 메모리 측면에서도 고민해보자.
'알고리즘 & 자료구조 > 자료구조' 카테고리의 다른 글
[자료구조] 단일 연결 리스트(Singly Linked List) (0) | 2023.11.12 |
---|---|
[자료구조] 연결 리스트(Linked List) (0) | 2023.11.12 |
[자료구조] 원형 배열(Circular Array) (0) | 2023.11.05 |
[자료구조] 자료구조(Data Structure)의 정의 (0) | 2023.09.11 |