C#/코드

C# 동적 배열 만들기

DoubleJK 2021. 9. 9. 13:14
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