Algorithm/Data Structure

3. 동적 배열 구현

lee308812 2021. 1. 30. 16:37

 

 

[ 최종 구현(C#) ]

using System;
using System.Collections.Generic;

namespace Test
{
    public class MyList<T>
    {
        private static int DEFAULT_SIZE = 1;

        private T[] Data = new T[DEFAULT_SIZE];
        public int Count { get; private set; } = 0;    // 현재 저장되어있는 개수
        public int Capacity // 최대로 저장 가능한 용량
        {
            get
            {
                return Data.Length;
            }
        }

        public void Add(T item)
        {
            // 공간이 없을 경우 공간을 확보한다 = 현재 공간 * 2
            if(Count >= Capacity)
            {
                T[] newData = new T[Capacity * 2];

                // 기존 데이터 이사
                for (int i = 0; i < Count; i++)
                    newData[i] = Data[i];

                Data = newData;
            }

            Data[Count++] = item;
        }

        public void RemoveAt(int index) // 해당 인덱스에 있는 데이터 제거
        {
            // 지우려는 인덱스를 기준으로 뒤의 데이터를 하나씩 땡겨온다.
            for (int i = index; i < Count-1; i++)
            {
                Data[i] = Data[i + 1];
            }

            Data[Count - 1] = default;  // 지운 데이터 초기화
            Count--;
        }

        public T this[int index]
        {
            get
            {
                return Data[index];
            }
            set
            {
                Data[index] = value;
            }
        }
    }

    class Program
    { 
        static void Main(string[] args)
        {
            MyList<int> data = new MyList<int>();
            data.Add(1);
            data.Add(2);
            data.Add(3);
            data.Add(4);
            data.Add(5);

            for(int i = 0; i < data.Count; i++)
                Console.WriteLine(data[i]);

            data.RemoveAt(3); // 4가 지워져야 한다.
            for (int i = 0; i < data.Count; i++)
                Console.WriteLine(data[i]);

            data.RemoveAt(2); // 3이 지워져야 한다.
            for (int i = 0; i < data.Count; i++)
                Console.WriteLine(data[i]);
        }
    }
}

 

'Algorithm > Data Structure' 카테고리의 다른 글

[Leetcode] Binary Tree Preorder Traversal  (0) 2021.07.05
4. LinkedList 구현하기  (0) 2021.02.03
[C++ STL] set / multiset  (0) 2019.11.05
2. 큐(Queue) / 원형큐(Circular Queue)  (0) 2018.08.04
1. 스택(Stack)  (0) 2018.08.04