반응형

C#/자료구조 17

0402_ 그래프 자료구조 이론

그래프 자료구조 비선형자료구조로 정점과 간선으로 구성되어있다. 정점은 그래프 노드라고도 하며, 간선은 노드를 연결하는 라인에 해당 그래프는 G = (V, E) 로 정의 그래프는 루트노드라는 개념이 없고, 부모/자식이라는 개념도 없다. 트리가 상하계층 관계 표현이라하면, 그래프는 네트워크 모델을 구현 ㄷ연결이 단절된 부분 그래프들의 집합이 될 수도 있따. 그래프는 지도 네이게이터, 전화망, 항로, 등등에서 쓰인다. --- 키워드 정점 _ 그래프의 노드 간선 노드를 연결하는선 가중치 - 한 정점에서 다른 정점으로 가는 간선의 비용, 또는 가중치 인접 정점 ) 한 노드에서 간선에 의해 직접 여결된 이웃정점 부분 그래프 ) 한 그래프의 부분 영역을 가리키는 것으로 방향그래프 ) 간선이 방향을 가지고있는 그래프 ..

C#/자료구조 2021.04.02

0402_그래프 _ edge클래스 나눠서

다른 표현 방식 정점 클래스와 간선 클래스를 각각나누고 하는 그래프 노드클래스 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace study20 { public class Node { public string key; public LinkedList edges; public Node(string key) { this.key = key; this.edges = new LinkedList(); } } } 엣지 클래스 using System; using System.Collections.Generic; using System.Linq; u..

C#/자료구조 2021.04.02

0401_ 이진 탐색 트리 (Binary Search Tree : BST) // Add 메서드

이진탐색트리 쉰회 주로 중위 순회 방식을 사용한다. 이진탐색 트리의 구현 이진트리와 동일한 노드 클래스를 사용한다. 루트 노드를 배누 프라이빗필드로. 필요한 메서드는 퍼블릭, 보통 노드를 외부에 노출 시킬 필요가 없어서 , 노드 클래스 역시 Nested private class로 구현 노드 키 데이타를 추가할때 사용하는 Add, 검색하는 Search. 삭제 Remove 데이타를 추가하기 위해서는 먼저 루트 노드로부터 키를 비교한다. 좌,우 노드로 계속 이동해 내려가면서 새키를 추가할 장소를 찾는다. 즉, 키가 루트 혹은 서브트리의 루트보다 작으면 왼쪽, 크면 오른쪽으로 이동 마약 이동한 노드가 null이 되면 그곳이 새 노드를 넣을 곳 --- using System; using System.Collect..

C#/자료구조 2021.04.01

0401 _ 반복방식 이진트리 중위순회

중위순회를 스택으로 루트 노드에서 최좌측 노드까지 스택에 저장한다. 스택이 빌때까지 루프를 돈다. 스택에서 pop하여 노드를 출력한다. 오른쪽 노드가 있으면 오른쪽 노드부터 오른쪽 서브 트리의 최좌측 노드까지 스택에 저장 안에서 var node = Root; 템프처럼 안에서 이런 변수를 쓰면 이 걸로 변화하면서 값을비교 하겠다는 것 생각을 먼저하고 코드로 바꾼다. 만약 코드가 안되면 구현된걸 일단봐도된다.

C#/자료구조 2021.04.01

0331_반복 방식으로 구현한 이진트리 순회

-재귀를 사용하지 않고 반복 방식으로 구현한 이진트리 순회 // 재귀를 사용 안하겠다. 재귀를 사용하지않으면 스택을 사용하게 된다. 루트 노드를 스택에 넣는다. 스택이 빌떄 까지 루프를 돈다. 스택에서 팝하여 노드를 출력 오른족 노드가 있으면 스택에 저장 왼쪽 노드가 있으면 스택에 저장. ---- public void PreOrderIterative() { //스택생성 var stack = new Stack(); //루트를 스택에 넣는다. //Push stack.Push(this.root); //스택요소가 있으면 반복한다. while (stack.Count > 0) { //꺼낸다. var node = stack.Pop(); // 제일 위에 있는 걸 꺼낸다. //출력한다. Console.Write("{0}..

C#/자료구조 2021.03.31

0331 _ BinaryTree 배열로 구현하기

이진트리 (Binary Tree) 트리중 자식 노드의 수가 2개 이하인것을 이진트리 이진트리는 구현이 단순하다는 점 비롯하여 여러장점이있다. 이진트리는 한쪽 방향으로 틀어진건 1.사향이진트리 모두 노드들이 자식을 가지고있는건 2.포화이진트리 3.완전이진트리 - 왼쪽부터 자식이 차 잇는거 -- 힙 자료구조가 전형적인 완전이진트리에 해당한다. 이진트리는 일반적으로 연결리스트를 이용하는 방법과 배열을 이용하는 방법이있다. 이진 트리의 노드는 데이타와 좌/우 노드를 갖는 간단한 구조이므로 Preorder 는 부모노드를 먼저 순회하고, 다음은 왼쪽 서브트리를, 마지막으로 오른쪽 서브트리를 순회하는 방식이다. ㅂ 배열을 이용한 배열에 이진 트리를 저장하는 방식은 기본적으로 티르 레벨순으로 레벨 순으로 왼쪽에서 오른..

C#/자료구조 2021.03.31

0330 _ LCRSTree 구현 // 자동으로 노드 생성 및 출력하는 기능

트리클래스를 만들어보자 자식 노드를 추가하는 AddChild() . 형제노드를 추가하는 Addsibling() Addchild() : 자식을 추가해주는 것 Addsibling() : 형제를 추가해주는것 PrintLevelOrder : 형제모두 출력을하고 , 그 자식은 큐에 넣어두고 나중에 출력한다. 형제 출력하고, 자식을 큐에서 꺼내어서 출력한다. 즉 레벨순으로 위에서부터 가로방향으로 출력 // 같은 레벨 출력 해주는것 printindentTree : 레벨 1인 노드는 앞에 공백하나 주고, 레벨 2인 노드는 공배 두개를 주는 방식으로 들여쓰기를 통해서 계층을 출력하는 방식, 들여쓰기를 하나 추가해서 자기자신을 재귀호출하고, 전위 순회 로직을 기본으로 약간 변형한 것 1. 루트 생성해주기 2. Add ch..

C#/자료구조 2021.03.30
반응형