C#/자료구조 이해하기

참고 사이트: https://geukggom.tistory.com/8 [C# 기초] #19.Graph - Graph의 정의, 종류, 구현 방법 1. Graph란? 정점(vertex(V))과 그 정점을 연결하는 간선(edge(E)을 하나로 모아 놓은 자료구조. 연결되어 있는 객체 간의 관계를 표현할 수 있는 자료구조입니다. G = (V, E) (ex) 지도, 지하철 노선도, 전기 geukggom.tistory.com 정점(vertex)과 그 정점을 연결하는 간선(edge)을 하나로 모아 놓은 자료구조이다. 그래프도 트리와 같이 라이브러리에서 제공되지 않기 때문에 직접 구조를 구현해야 한다. 1. 무방향 그래프 : 두 정점을 연결하는 간선에 방향이 없는 그래프. 두 정점 간 양 방향으로 이동 가능. 2. 방..
트리란? 트리는 비선형 자료구조이다. 비선형 자료구조란 배열, 리스트와 같이 인덱스(0,1,2,...)가 순서대로 나열된 선형 자료구조의 반대라고 생각하면 된다. 계층모델이다. 노드(node)들의 집합으로 구성되어 있다. 노드란 데이터를 일컫는다. 각 노드는 하나의 부모 노드(루트 노드)와 여러 개의 자식 노드를 가질 수 있다. 트리는 하나의 루트 노드에서 간선을 통해 다양한 노드를 방문, 탐색할 수 있는 구조를 가진다. 이진 트리(Binary Tree) 컴퓨터에서 사용되는 데이터 구조의 하나로, 루트가 있는 트리 구조에서 어떤 노드의 자식의 수가 최대 2개를 넘지 않는 트리를 말한다. 이진 트리의 순회: 이진 트리의 모든 노드를 특정한 순서대로 한 번씩 방문하는 것이다. 1. 전위순회(Pre-order..
1. 해시셋이란? 해시셋은 딕셔너리와 해시테이블과 달리 키 따로 없고 밸류를 저장하는 컬렉션입니다. 해시테이블과 달리 데이터 타입을 명확히 써줘야 합니다. 또한 중복된 밸류를 허용하지 않으며, 리스트와 달리 순서가 따로 없습니다. 그래서 인덱스를 사용하여 접근할 수 없습니다. using.System.Collections.Generic; 으로 사용할 수 있습니다. 해시를 기반으로 값을 관리하기 때문에 값의 추가, 탐색, 제거 기능이 리스트보다 뛰어납니다. 2. 해시셋을 사용해보자! 1. Add(T item) - 추가 해시셋에 추가할 데이터를 Add를 통해 추가할 수 있습니다. 추가하려는 데이터 값이 이미 해당 해시셋에 존재하는 값일 경우 중복처리되어 추가되지 않습니다. public void TestHash..
개요 해시테이블을 공부하다가 해시테이블은 object 데이터 타입을 반환한다고 하여 object란 무엇인가에 대해 찾아보고 공부하게 되었습니다. object란? object타입은 값 형식(int, float, ...)부터 참조 형식(Class, string, ...)까지 모든 데이터를 담아낼 수 있는 데이터 타입입니다. 예를들면, 모든 기차가 모이는 object라는 기차역이 있고, 그 기차역에는 int형 기차, float형 기차, List기차, string기차 등 모든 종류의 기차가 올 수 있는 것입니다. 단, object를 제대로 이해하고 사용하기 위해선 위에서 말하는 값형식과 참조형식이 무엇인지, 박싱과 언박싱이 무엇인지 알면 좋을 것 같아 정리해보려합니다. 값? 참조? 값 형식(value type)..
해시테이블이란? 해시테이블은 Dictionary와 같이 "키(Key) - 값(Value)" 구조를 가진 컬렉션입니다. 해시테이블에서 키와 값은 'object' 자료형을 사용하며, 모두 object형식으로 선언되어 모든 데이터 타입을 가질 수 있습니다. using System.Collections; 를 통해 사용할 수 있습니다. 해시 테이블을 사용해보자! 1. Add(key, value) - 키/값 추가 키와 값을 해시 테이블에 추가합니다. public void TestHashTable() { Hashtable ht = new Hashtable(); ht.Add("name", "짱구"); ht.Add("age", 5); ht.Add("adress", "떡잎마을"); foreach (object k in h..
연결리스트(Linked List)란? 연결리스트는 일반 리스트처럼 순차적으로 데이터를 추가/삭제할 수도 있고, 원하는 위치의 데이터를 추가/삭제할 수 있습니다. 이 연결된 구조체는 메모리 상에서 물리적으로 연속된 영역에 저장되지 않고, 각 노드가 개별적으로 할당되어 다음 노드를 가리키는 포인터를 이용하여 연결합니다. 하지만 인덱스를 통해 직접 접근하는 데는 제약이 있고, 탐색 연산의 비용이 높아 데이터의 삽입과 삭제가 빈번한 경우에 유용하게 사용됩니다. 여기서 노드란, 연결리스트나 트리 등과 같은 자료구조에서 기본적인 데이터 단위입니다. 각 노드는 두 가지 주요 요소로 구성됩니다. 1. 데이터(값): 노드가 저장하는 실제 정보입니다. 이 데이터는 정수, 문자열 등 어떤 형식이든 될 수 있습니다. 2. 링..
코딩을 하다보면 배열이나 리스트를 낮은 수부터 높은 수로의 오름차순을, 높은 수부터 낮은 수로의 내림차순을 해줘야 할 경우가 생깁니다. 이 때 사용가능한 매서드를 몇 개 알아보는 시간을 가지도록 하겠습니다. 오름차순은 숫자는 낮은 수부터, 문자는 알파벳 순이며, 소문자가 대문자보다 낮은 값입니다. 예를들어 abcABC라는 문자열이 있다면 오름차순을 진행했을 때 aAbBcC로 나오게됩니다. 1. Sort() - 오름차순 Sort()는 List클래스와 Array클래스에 속한 매서드입니다. 다음은 Sort()를 사용한 리스트와 배열의 오름차순 예제입니다. List list = new List { 2, -1, 9, 5, 0 }; //list 오름차순 진행. list.Sort(); foreach (var item..
List(리스트)란? 리스트는 c#에서 제공하는 동적 배열을 나타내는 데이터 구조입니다. 여기서 동적 배열이란 일반적으로 크기가 고정된 배열과 달리 크기를 자유롭게 조절할 수 있습니다. 예를들면, 끝이 정해지지 않은 무한열차...라고 생각하시면 될 것 같습니다. using System.Collection.Generic; 를 네임스페이스에 적어야 사용할 수 있습니다. 위에서 말했다시피 리스트의 가장 큰 장점은 배열과 달리 방의 개수를 정하지 않아도 된다는 것입니다. 배열은 방의 개수 또는 값을 할당해서 선언해줘야하는데, 리스트는 그러지 않아도 선언과 초기화가 되기 때문입니다. //int형 값을 가질 수 있는 비어있는 리스트 생성. List listInt = new List(); //해당 데이터 값을 리스트..
Dictionary란? Dictionary는 키(key)와 값(value)을 쌍으로 저장하는 클래스입니다. 이는 해시 테이블을 기반으로 하여 빠른 데이터 검색 및 조회를 할 수 있습니다. Dictionary는 System.Collections.Generic 에 속해 있습니다. 키의 유일성: 각 키는 유일해야 하며, 중복된 키를 허용하지 않습니다. 값의 중복 허용: 값은 중복될 수 있습니다. 즉, 여러 개의 다른 키가 동일한 값을 가질 수 있습니다. Dictionary를 사용해보자! 1. Dictionary 선언 및 초기화 //키는 문자열, 밸류는 정수형을 가진 딕셔너리 Dictionary dic = new Dictionary(); 2. Add(key, value) - 데이터 추가 Dictionary di..
스택(Stack)이란? 스택(Stack)은 클래스이며, 데이터를 선입후출(FILO - First In Last Out) 또는 후입선출(LIFO - Last In First Out)의 순서로 저장하는 추상 자료형(ADT)입니다. 이는 스택에 데이터를 추가할 때 항상 맨 위에 추가되고, 데이터를 제거할 때는 맨 위에서 제거되는 구조를 의미합니다. 예를들어 컨테이너를 수직으로 한 줄로 쌓는 작업이라고 생각하시면 편할 것 같습니다. Stack은 System.Collections 네임스페이스에 정의되어 있습니다. 스택은 주로 함수 호출의 실행 컨텍스트를 관리하거나, 문제를 해결하는 과정에서 임시 데이터를 저장하거나 역순으로 데이터를 처리할 때 유용하게 사용됩니다. 스택(Stack)을 사용해보자! 1. Stack ..
ForMan_
'C#/자료구조 이해하기' 카테고리의 글 목록