호빵의 IT 개발소

[C#] 연결 리스트 본문

자료구조와 알고리즘/자료구조와 알고리즘 맛보기

[C#] 연결 리스트

호빵Stack 2022. 1. 11. 00:55

연결 리스트 구현 연습

namespace Algorithm
{
    class MyLinkedListNode<T>
    {
        public T Data;
        public MyLinkedListNode<T> Next; //MyLinkedListNode을 가리키는 주소 Next
        public MyLinkedListNode<T> Prev; //MyLinkedListNode을 가리키는 주소 Prev
    }

    class MyLinkedList<T>
    {
        public MyLinkedListNode<T> Head = null; //MyLinkedListNode에 첫번째
        public MyLinkedListNode<T> Tail = null; //MyLinkedListNode에 마지막
        public int Count = 0;

        public MyLinkedListNode<T> AddLast(T data)
        {
            MyLinkedListNode<T> newRoom = new MyLinkedListNode<T>();
            newRoom.Data = data;

            if (Head == null) //만약 아직 방이 아예 없다면
                Head = newRoom; //새로 추가한 첫번째 방이 Head이다.

            //기존 [마지막 방]과 [새로 추가되는 방]을 연결해 준다.
            if (Tail != null) //만약 예)101(Head) 102 103(Tail) 104이 있다면
            {
                Tail.Next = newRoom; //예) 103 -> 104와 연결
                newRoom.Prev = Tail; //예) 103 <- 104와 연결
            }
            
            //[새로 추가되는 방]을 [마지막 방]으로 인정한다.
            Tail = newRoom; //104가 Tail이 된다.
            Count++; //방 개수 추가
            return newRoom;
        }

        public void Remove(MyLinkedListNode<T> room)
        {
            //예)101(Head) 102 103 104(Tail)
            //만약 Head를 삭제한다면, 다음 방이 Head가 된다.
            if (Head == room) //예) 101삭제
                Head = Head.Next; //예) 102(Head) 103 104(Tail)

            //만약 Tail을 삭제한다면, 이전 방이 Tail이 된다.
            if (Tail == room) //예)104삭제
                Tail = Tail.Prev; //예) 101(Head) 102 103(Tail)

            if (room.Prev != null) //예) 삭제하는 103 이전 방이 있다면
                room.Prev.Next = room.Next; //예) 102 -> 104 연결

            if (room.Next != null) //예)삭제하는 103 다음 방이 있다면
                room.Next.Prev = room.Prev; //예) 102 <- 104 연결

            Count--;
        }
    }

    class Board
    {
        public int[] _data = new int[25]; //배열
        public MyLinkedList<int> _data3 = new MyLinkedList<int>(); //연결 리스트

        public void Initialize()
        {
            //101 102 103 104 
            _data3.AddLast(101);
            _data3.AddLast(102);
            MyLinkedListNode<int> node = _data3.AddLast(103);
            _data3.AddLast(104);

            //101 102 104
            _data3.Remove(node); 
        }
    }
}

 

그림 예시)

 

 

---------------------------------------------------------------------------------------------------------------------------

참고 : [인프런] Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘

Comments