250x250
Rainbow🌈Coder
My dev Note📒
Rainbow🌈Coder
전체 방문자
오늘
어제
  • 분류 전체보기 (411)
    • 공지사항 (0)
    • Debugger (10)
      • Visual Studio Debugger (1)
      • Chrome DevTools (3)
      • Visual Studio Code Debugger (4)
      • eclipse (1)
      • intelliJ (1)
    • OOP (2)
      • OOP (2)
    • TypeScript (54)
      • 타입스크립트 TypeScript (54)
    • Javascript (87)
      • Javascript (45)
      • Node.js (19)
      • React (5)
      • FE 개발환경설정 (3)
      • React와 Node 같이 때려잡기 (6)
      • next.js (2)
      • pixi.js (7)
    • 마크업 (23)
      • Html & Css (23)
    • C# (80)
      • C# (12)
      • 이것이 C#이다 (68)
    • C++ (30)
      • c++ (27)
      • win api (3)
    • Unity (18)
      • Unity(기초) (8)
      • Unity(C#중급) (5)
      • 유니티 포톤(네트워크) (4)
      • unity c# MyCode (1)
    • Java & Spring (29)
      • Java (11)
      • 스프링 (8)
      • Java Algorithm (9)
      • Javs Data Structures (1)
    • 자료구조와 알고리즘 (15)
      • 자료구조 (5)
      • 알고리즘 (10)
    • 형상관리 (15)
      • Git (11)
      • 소스트리 (3)
    • 그래픽스 (7)
      • WebGl (7)
    • AWS (3)
      • aws (3)
    • 리눅스 (5)
      • 리눅스 (5)
    • 책 리뷰 (13)
      • 클린코드(책리뷰) (3)
      • 유지보수가능한코딩의기술C#편(책리뷰) (1)
      • 리팩토링(자바스크립트판) (9)
    • Server (2)
      • 게임 서버(네트워크, 멀티쓰레드,OS) (2)
    • 설계, 아키텍쳐 (4)
    • 파이썬 (5)
    • 디자인패턴 (2)
    • mocha (2)
    • Jest (1)
    • Spine (1)
    • 인공지능 (1)
      • 혼자공부하는머신러닝+딥러닝 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • MySQL
  • 컴포지션
  • 위임
  • ㅣㄷ

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Rainbow🌈Coder

My dev Note📒

자료구조와 알고리즘/자료구조

[C# 자료구조] 동적 배열(List: C++vector와 유사함) 구현

2022. 2. 4. 11:01
728x90

Board 클래스 안에서 List를 써보고,

그 List의 동적 배열 로직을 직접 구현하는 코드

 

List

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Algorithm
{
    class Board
    {
        public int[] _data = new int[25]; //배열
        public List<int> _data2 = new List<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); //인덱스 2번째 데이터를 삭제하라.
        }
    }
}

구현한 동적 배열

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Algorithm
{
    class MyList<T>
    {
        const int DEFAULT_SIZE = 1;
        T[] _data = new T[DEFAULT_SIZE];
        public int Count = 0; //실제로 사용중인 데이터 개수
        public int Capacity { get { return _data.Length; } }
        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++;
        }

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

        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); //인덱스 2번째 데이터를 삭제하라.
        }
    }
}

    class MyList<T>
    {
        const int DEFAULT_SIZE = 1;
        T[] _data = new T[DEFAULT_SIZE];
        public int Count = 0; //실제로 사용중인 데이터 개수
        public int Capacity { get { return _data.Length; } } //Capacity는 2배씩 늘도록 설정
        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++;
        }

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

        public void RemoveAt(int index)
        {
            for (int i = index; i < Count - 1; i++)
                _data[i] = _data[i + 1];
            _data[Count - 1] = default(T);
            Count--;
        }

    }


 

 

Main(중요 x)

using System;

namespace Algorithm
{
    class Program
    {
        static void Main(string[] args)
        {
            Board board = new Board();
            board.Initialize();
            Console.CursorVisible = false;
            const int WAIT_TICK = 1000 / 30;
            const char CIRCLE = '\u25cf';
            int lastTick = 0;
            while(true)
            {
                #region 프레임 관리
                //만약에 경과한 시간이 1/30초 보다 작다면
                int currentTick = System.Environment.TickCount;
                if (currentTick - lastTick < WAIT_TICK) continue;
                lastTick = currentTick;
                #endregion
                //입력

                //로직

                //렌더링
                Console.SetCursorPosition(0, 0);
                for(int i=0; i<25; i++)
                {
                    for(int j=0; j<25; j++)
                    {
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.Write(CIRCLE);
                    }
                    Console.WriteLine();
                }
            }

        }
    }
}
728x90

'자료구조와 알고리즘 > 자료구조' 카테고리의 다른 글

[C# 자료구조] 선형 자료 구조 ( 배열 vs 동적 배열 vs 연결 리스트)  (0) 2022.02.03
[순환과 반복] 팩토리얼 계산 프로그램  (0) 2022.01.31
C# Queue와 Stack 특성을 LinkedList로 그대로 구현  (0) 2022.01.25
[C++]원형큐 구현, 줄서기 예시  (0) 2021.12.15
    '자료구조와 알고리즘/자료구조' 카테고리의 다른 글
    • [C# 자료구조] 선형 자료 구조 ( 배열 vs 동적 배열 vs 연결 리스트)
    • [순환과 반복] 팩토리얼 계산 프로그램
    • C# Queue와 Stack 특성을 LinkedList로 그대로 구현
    • [C++]원형큐 구현, 줄서기 예시
    Rainbow🌈Coder
    Rainbow🌈Coder
    몰라도 결국은 아는 개발자, 그런 사람이 되기 위한 매일의 한걸음

    티스토리툴바