[TIL] 24.12.29 SUN

GDORI·2024년 12월 29일
0

TIL

목록 보기
147/184
post-thumbnail

C# 의 자료구조

C#에는 배열, 리스트, 스택, 큐, 링크드리스트, 해시맵, 해시셋의 자료구조를 제공한다.
각 사용 용도가 다른데 사용 예시는 다음과 같다.

자료구조 사용예시

자료구조주요 특징사용 예시
배열고정 크기, 빠른 접근고정 크기의 데이터 처리
리스트가변 크기, 삽입/삭제 가능동적 데이터 관리
스택LIFO 구조재귀, 괄호 검사, DFS
FIFO 구조작업 대기열, BFS
LinkedList빠른 삽입/삭제빈번한 삽입/삭제 작업
Dictionary키-값 쌍 관리, 빠른 검색해시 테이블 구현
HashSet중복 없는 데이터 저장집합 연산 (교집합, 합집합 등)

배열

배열은 크기가 고정되어 있으며 동일한 데이터 타입의 요소를 저장하고 크기를 선언시에 지정하게 되면 변경이 불가하다.
빠른 인덱스 접근이 가능하고 메모리 효율적이나 유연성이 부족하고 요소 추가,삭제가 비효율적이다.

int[] numbers = { 1, 2, 3, 4, 5 };
Console.WriteLine(numbers[0]);

리스트

리스트는 크기가 가변적이며 내부적으로 배열 기반이고 크기가 초과되면 새로운 배열로 복사한다. 데이터 추가,삭제가 용이하다.

List<int> numbers = new List<int> {1,2,3};
numbers.Add(4);
numbers.Remove(1);

링크드 리스트

링크드리스트는 노드가 데이터와 다음 노드의 참조를 가진 형태로 삽입/삭제가 빠르다. 중간 삽입, 삭제가 배열이나 리스트보다 빠르나 접근이 느리다는 단점이 있다.

LinkedList<int> linkedList = new LinkedList<int>();
linkedList.AddLast(1); // 1
linkedList.AddLast(2); // 1,2
linkedList.AddFirst(3); // 3,1,2
LinkedListNode<int> node = linkedList.Find(1);
linkedList.AddBefore(node,7) // 3,7,1,2

메서드 요약표

메서드설명반환값
AddFirst맨 앞에 요소 추가추가된 노드
AddLast맨 뒤에 요소 추가추가된 노드
AddBefore지정된 노드 앞에 요소 추가추가된 노드
AddAfter지정된 노드 뒤에 요소 추가추가된 노드
Find특정 값을 가진 첫 번째 노드 반환LinkedListNode<T>
Remove특정 값을 가진 노드 제거true/false
RemoveFirst첫 번째 노드 제거없음
RemoveLast마지막 노드 제거없음

스택

스택은 LIFO 형 자료구조이며 마지막 추가된 요소가 먼저 제거된다. DFS, 괄호검사 등에 적합하며 구현이 간단하다.

Stack<int> stack = new Stack<int>();
stack.Push(1);
stack.Push(2);
stack.Pop(); // 2 가 제거되며 2를 반환함
stack.Peek(); // 1이 제거되지 않고 1을 반환함

큐는 FIFO 형 자료구조이고 먼저 추가된 요소가 먼저 제거된다. 이 친구는 스택과 달리 Enqueue, Dequeue로 작동한다.
순서가 중요한 패킷 처리나 작업대기열, BFS등에 적합하다.

Queue<int> queue = new Queue<int>();
queue.Enqueue(1);
queue.Enqueue(2);
queue.Dequeue(); // 1이 제거되며 1을 반환함
queue.Peek();   // 2가 제거되지 않고 2를 반환함

해시맵

해시맵은 딕셔너리형으로 키-값 쌍으로 데이터를 저장한다. js에서 객체와 같이 사용된다.

Dictionary<string,int> dict = new Dictionary<string, int>();
dict["kong"] = 2;
dict["kongkong"] = 22;
Console.WriteLine(dict["kong"]); // 2

해시셋

해시셋은 중복을 허용하지 않는 집합 자료구조로 js에서 Set과 같은 역할을 한다.

HashSet<int> set = new HashSet<int> { 1, 2, 3 };
set.Add(3); // 중복 추가 불가, False를 반환함
profile
하루 최소 1시간이라도 공부하자..

0개의 댓글

관련 채용 정보