Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- thread
- 트리
- 알고리즘
- rookiss
- 반복문
- 힙영역
- map
- 큐
- static_cast
- 해쉬맵
- vector
- MonoBehaviour
- 공부
- 리스트
- 자료구조
- c#
- std::unordered_map
- 멀티쓰레드
- 스택영역
- 기술면접
- Queue
- std::map
- 배열
- list
- 차이점
- 객체지향
- 프래그멘테이션
- 스택
- 벡터
- 인프런
Archives
- Today
- Total
호빵의 IT 개발소
[C#] 연결 리스트 본문
연결 리스트 구현 연습
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: 자료구조와 알고리즘
'자료구조와 알고리즘 > 자료구조와 알고리즘 맛보기' 카테고리의 다른 글
| [C#] 그래프 이론 (0) | 2022.01.11 |
|---|---|
| [C#] 스택과 큐 (0) | 2022.01.11 |
| [C#] 동적 배열 구현 (0) | 2022.01.11 |
| [C#] 배열, 동적 배열, 연결 리스트 비교 (0) | 2022.01.10 |
| Big-O 표기법 (0) | 2022.01.10 |
Comments