반응형
특징
- 배열의 크기 변경은 O(n)
- 삽입, 삭제의 경우 O(n)
- 임의의 접근은 O(1)
구현
생성자
배열의 크기를 인자값으로 받아 배열을 생성한다.
public Array(int size) { _size = size; _array = new T[_size]; }
크기 변경
새로운 배열의 크기를 인자값으로 받는다.
새로운 배열을 생성하고, 기존 배열의 값을 복사한다.
기존배열에 새로운 배열을 참조한다.
public void Resize(int newSize) { T[] newArray = new T[newSize]; int count = Mathf.Min(newSize, _size); for(int i = 0; i < count; ++i) { newArray[i] = _array[i]; } _size = newSize; _array = null; _array = newArray; }
인덱서 (Indexer)
public T this[int i] { get { return _array[i]; } set { _array[i] = value; } } ```
풀코드
public class Array<T> { private int _size; private T[] _array; public Array(int size) { _size = size; _array = new T[_size]; } public T this[int i] { get { return _array[i]; } set { _array[i] = value; } } public void Resize(int newSize) { T[] newArray = new T[newSize]; int count = Mathf.Min(newSize, _size); for(int i = 0; i < count; ++i) { newArray[i] = _array[i]; } _size = newSize; _array = null; _array = newArray; } public void Insert(T data, int index) { for(int i = _size - 1; i > index; --i) { _array[i] = _array[i - 1]; } _array[index] = data; } public void Remove(int index) { for(int i = index + 1; i < _size; ++i) { _array[i - 1] = _array[i]; } } public int GetSize() { return _size; } }
테스트 코드
Array<int> intArray = new Array<int>(10); for(int i = 0; i < 10; ++i) { intArray[i] = i; } intArray.Remove(8); intArray.Insert(100, 0);
반응형
'자료구조 와 알고리즘' 카테고리의 다른 글
삽입 정렬 (Insertion Sort) (0) | 2021.06.16 |
---|---|
거품정렬 Bubble Sort (0) | 2021.06.09 |