본문 바로가기
알고리즘 및 디자인패턴

동적 배열 구현 연습

by Mostlove 2023. 7. 13.
728x90
반응형

using System;


namespace CSharp1
{
    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 int[] _data = new int[25]; //배열
        public MyList<int> _data2 =  new MyList<int>();// 동적 배열
        public LinkedList<int> _data3 = new LinkedList<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);
        }

    }
}

반응형

'알고리즘 및 디자인패턴' 카테고리의 다른 글

맵 만들기  (0) 2023.07.13
연결 리스트 구현 연습  (0) 2023.07.13
배열, 동적 배열, 연결 리스트 비교  (0) 2023.07.13
세팅  (0) 2023.07.13
BIG-O표기법  (0) 2023.07.12