[ 최종 구현(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 |