본문 바로가기

컴퓨터 언어/자료구조

(5)
[C#] 해시테이블 c#에서 해시테이블은 키-값 쌍을 저장하는 데이터 구조로 키를 사용하여 값을 검색하고 저장할 수 있는 컬렉션이다. 해시테이블은 특정 키에 대한 값을 빠르게 찾을 수 있는 해시 함수를 사용하여 내부적으로 데이터를 저장하는 방식을 사용하는데 이는 키 값을 해시 함수로 해싱하여 해시테이블의 특정 위치로 직접 액세스하도록 만든 방식이다. 여기서 해시는 임의의 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑하는 것을 말한다. 예를 들어 임의의 숫자에 % 10의 연산을 통해 나오는 숫자는 한 자리만을 나타내게 되므로 일종의 해시라고 볼 수 있다. 이 해시테이블은 몇가지 특징을 갖고 있는데 앞서 말했듯, 키와 값 쌍을 저장하고 키는 고유해야하기 때문에 중복된 키를 허용하지 않으며, 탐색, 삽입, 삭제에 있어서..
[C#]우선순위 큐와 힙 아래는 우선순위 큐의 기초적인 작성 방식이다. 이렇게 선언시에 클래스명에 붙이는 제네릭 형식에 우선순위가 추가된다는 점과 넣은 순서대로가 아니라 우선순위에 따라 요소가 나온다는 점만 빼면 Enqueue,Dequeue,Peek를 사용한다는 점에서 별반 다를게 없어보인다. 하지만 앞서 정리했던 Queue(큐) 는 PriorityQueue(우선순위 큐)와 이름은 같지만 내부적으로는 전혀 다른 구성을 갖고 있다. 우선 큐는 배열을 기반으로 연속적으로 데이터들을 연속적으로 일렬로 저장하며 새로운 요소가 추가될 경우 Tail에 해당하는 제일 뒤쪽에 추가하고 자료를 꺼낼 때는 Head에 해당하는 제일 앞에서 꺼내는 형식인데 우선순위 큐는 힙 트리(Heap Tree)의 구조를 갖고 있어 새로운 요소를 추가할 때는 힙 ..
[c#] 스택과 큐 [스택(Stack)] 스택은 후입선출(LIFO - Last In First Out)의 구조를 가진 자료구조로 가장 최신에 입력된 순서대로 처리해야 하는 상황에 이용한다. 자료구조에서의 스택과 메모리 구조에서의 스택은 각각의 특징에서 차이를 보이고 있다. 먼저 자료구조에서의 스택은 추상적인 데이터 구조이자 프로그래밍에서 데이터를 저장하고 관리하는 데에 사용되지만 메모리 구조에서의 스택은 컴퓨터 메모리의 일부로서 물리적인 형태이며 함수 호출 및 관련 데이터를 메모리에 저장하는 데에 사용한다. 그런데 두 스택은 후입선출의 작동방식을 가지고 있다는 점에서 가장 큰 공통점을 보인다. 이러한 후입선출의 특징은 각 종류의 스택이 있는 부분에서 이점들을 갖고 있다. 먼저 자료구조에서의 스택을 사용했을 때의 이점들을 알..
[C#] 연결 리스트 [연결 리스트(LinkedList)] 연결 리스트는 데이터를 포함하는 노드들을 양방향 혹은 한방향으로 연결하여 만든 자료구조이다. 노드는 데이터와 이전,다음 노드 객체를 참조하는 형식으로 구성되어 있는데 노드는 메모리에 연속적으로 배치되지 않는다. 배열은 인덱스를 통해 요소들에 접근할 수 있지만 메모리상 독립적으로 위치해 있는 노드들에 접근하려면 노드들은 각자가 데이터를 가지고 다음 노드나 이전 노드에 대한 위치 정보에 대해 가지고 있어야 한다. 따라서 C#에서는 LinkedList 클래스와 별개로 LinkedList 클래스로부터 생성된 객체를 이루는 것은 단일 정보들의 나열이 아닌 각 노드들이다. 마찬가지로 링크드 리스트는 인덱스를 사용할 수 없기 때문에 0부터 시작해서 길이보다 작은 수가 될 때까지 ..
[C#] 배열과 리스트 [배열(Array)] 배열은 동일한 유형의 여러 요소를 순차적으로 저장하는 자료 구조이다. 배열에 저장된 각 요소는 배열 내에서 고유한 위치에 있는 인덱스로 식별할 수 있다. 그리고 이 인덱스를 사용하여 배열의 특정 요소에 직접 접근할 수 있다. 배열을 초기화 할 때 정한 크기는 소멸될 때까지 유지된다. 배열의 요소들은 메모리 구조상으로 시작 부분부터 연속적으로 구성되어 있기 때문에 C++의 경우 포인터, 즉 주소 값에 대한 참조에 산술 연산자를 사용하여 직접적으로 배열의 요소에 접근할 수도 있었다. C#에서는 포인터를 사용할 수 없기에 C++을 통해 메모리 구조상의 배열에 대해 간접적으로 이해할 수 있었다. [선형 리스트(List)] 선형 리스트는 시작시 크기가 고정되는 배열과 다르게 런타임 중에 크기..