자료구조 와 알고리즘

배열 Array

브랑제리 2021. 6. 9. 22:45

특징

  • 배열의 크기 변경은 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