728x90
namespace Algorithm
{
class MyList<T>
{
const int DEFAULT_SIZE = 1;
T[] _data = new T[DEFAULT_SIZE];
public int Count; // 실제로 사용 중인 데이터 개수
public int Capacity // 예약된 데이터 개수
{
get
{
return _data.Length;
}
}
// O(1) 예외 케이스 : 이사 비용은 무시한다.
public void Add(T item)
{
// 1. 공간이 충분히 남아 있는지 확인
if (Count >= Capacity)
{
// 공간을 다시 늘려서 확보
T[] newArray = new T[Count * 2];
for (int i = 0; i < Count; i++)
{
newArray[i] = _data[i];
}
_data = newArray;
}
// 2. 공간에다가 데이터를 넣어준다.
_data[Count] = item;
Count++;
}
// O(1)
public T this[int index]
{
get
{
return _data[index];
}
set
{
_data[index] = value;
}
}
// O(N)
public void RemoveAt(int index)
{
for (int i = index; i < Count - 1; i++)
{
_data[i] = _data[i + 1];
}
_data[Count - 1] = default(T);
Count--;
}
}
class Board
{
public MyList<int> _data2 = new MyList<int>(); // 동적 배열
// 동적 배열 구현 연습
public void Initialize()
{
_data2.Add(101);
_data2.Add(102);
_data2.Add(103);
_data2.Add(104);
_data2.Add(105);
int temp = _data2[2];
_data2.RemoveAt(2);
}
}
}728x90
'C# > 코드' 카테고리의 다른 글
| C# 연결 리스트 만들기 (0) | 2021.09.14 |
|---|---|
| C# 다차원 배열을 이용한 코드 (0) | 2021.09.01 |
| C# int 배열 관련 코드 (0) | 2021.09.01 |