본문 바로가기

전공 공부

[자료구조] 그래프(Graph)란? - 컴도리돌이 그래프(Graph)란? 연결되어 있는 객체 간의 관계를 표현하는 자료구조이다. 그래프 G는 (V, E)로 표시되며 V는 정점 또는 노드라고 불리며, 여러 가지 특성을 가질 수 있는 객체를 의미하고 E는 간선 또는 링크로 정점들 간의 관계를 의미한다. 그래프의 종류 무방향 그래프(undirected graph) 간선을 통해서 양방향으로 갈 수 있다. 방향 그래프(directed graph) 간선을 통해서 한쪽 방향으로만 갈 수 있다. 가중치 그래프(weighted graph) 간선에 비용이나 가중치가 할당된 그래프 그래프(graph)의 용어 인접 정점(adjacent vertex) :하나의 정점에서 간선에 의해 직접 연결된 정점 차수(degree) : 하나의 정점에 연결된 간선의 수 경로(path) : 간.. 더보기
[자료구조] 우선순위 큐(Priority Queue)란? + 힙(heap)이란? - 컴도리돌이 우선순위 큐(Priority Queue)란? 모든 데이터가 우선순위를 가지고 있고, 들어온 순서와 상관없이 우선순위가 높은 데이터가 먼저 출력된다. 스택이나 큐를 우선순위 큐로 구현할 수 있으며, 응용분야로는 네트워크 트래픽 제어, os의 작업 스케쥴링 등이 있다. 우선순위 큐 구현 방법 힙(heap)이란? 완전 이진트리(complete binary tree)로 구성되며 최대 힙, 최소 힙의 두 가지 표현법이 있다. 우선순위 큐를 위해 만들어진 자료구조로 큰 값이 상위 레벨에 있고 작은 값이 하위 레벨에 있다는 정도의 느슨한 정렬 상태를 유지한다. 힙의 목적이 삭제 연산에서 가장 큰 값을 효율적으로 찾아내기만 하면 되는 것이므로 전체를 정렬할 필요는 없다.(최대 힙을 가정할 때) 최대 힙(max heap.. 더보기
[자료구조] 이진탐색트리(Binary Search Tree)란? - 컴도리돌이 이진 탐색 트리(Binary Search Tree)란? 이진트리 기반의 탐색을 위한 자료 구조로 효율적인 탐색 작업을 할 때 사용하는 자료 구조입니다. 이진 탐색 트리(Binary Search Tree)의 정의 -모든 노드는 유일한 키를 갖는다. -왼쪽 서브 트리 키들은 루트 키보다 작다. -오른쪽 서브 트리의 키들은 루트의 키보다 크다. -왼쪽과 오른쪽 서브 트리도 이진 탐색 트리이다. -탐색작업을 효율적으로 하기 위한 자료구조 이진 탐색 트리(Binary Search Tree)의 탐색 그림 예시 && C언어 코드 -비교한 결과가 같으면 탐색이 성공적으로 끝난다. -키 값이 루트보다 작은면 왼쪽 자식을 기준으로 다시 탐색 -키 값이 루트보다 크면 오른쪽 자식을 기준으로 다시 탐색 이진 탐색 트리(Bin.. 더보기
[자료구조/트리(tree)] 중위순회,후위순회,전위순회,레벨 순회 - 컴도리돌이 기본적인 트리의 구조를 알았으면 이제 트리에서 제일 중요한 순회를 배워보았습니다. 이진트리의 기본 순회 전위 순회(preorder traversal) 그림 예시 && c언어 코드 1. 루트 노드를 방문한다 2. 왼쪽 서브 트리를 방문한다 3. 오른쪽 서브 트리를 방문한다 처음 printf로 루트 노드의 값(value)을 처리하고 왼쪽 서브 트리와 오른쪽 서브 트리를 순서대로 순환 호출하여 전위 순회 문제를 해결합니다. 중위 순회(inorder traversal) 그림 예시 && c언어 코드 1. 왼쪽 서브 트리를 방문한다 2. 루트 노드를 방문한다 3. 오른쪽 서브 트리를 방문한다 왼쪽 서브트리를 먼저 순환 재귀 호출로 방문하고 printf로 루트 노드의 값(value)을 처리합니다. 마지막으로 오른쪽 .. 더보기
[자료구조] 단순 연결 리스트(singly linked list), 이중 연결리스트(double linked list) - 컴도리돌이 단순 연결 리스트(singly linked list) -하나의 링크 필드를 이용하여 연결 -마지막 노드의 링크 값은 NULL 연결 리스트로 구현한 리스트 (삽입, 삭제 연산 예시 && 코드) 연결 리스트 구조체는 int형 data와 포인터 링크로 구성되어 있으며 전역 변수로 포인터 head가 NULL값으로 설정해 놓습니다. 전역 변수를 포인터 head을 사용할 경우 삽입 삭제할 때 전 노드를 찾아야 할 경우가 있기 때문에 get_entry 함수로 따로 만들어놔야 합니다. 굳이 만들지 않고 삽입 삭제 안에서 설정해놓아도 되는데 코드 길이가 길어지기 때문에 함수를 임의로 만들어 놓았습니다. 삽입 연산에서는 prev와 new_node라는 두 개의 포인터 변수를 설정하여, new_node는 현재 삽입할 값을 가.. 더보기
[자료구조] 큐(queue) 란? - 컴도리돌이 큐(queue)란? 큐(queue)는 스택과 다르게 먼저 들어온 데이터가 먼저 나가는 자료구조로 선입선출(FIFO : First-in First-out) 방식으로 삽입과 삭제는 FIFO 순서로 따릅니다~ 삽입은 큐(queue)의 후단에서, 삭제는 전단에서 이루어져요! 큐(queue)의 연산 -init() : 큐를 초기화한다. -enqueue(e) : 주어진 요소 e를 큐의 맨 뒤에 추가한다. -dequeue() : 큐가 비어있지 않으면 맨 앞 요소를 삭제하고 반환한다. -is_empty() : 큐가 비어있으면 true를 아니면 false를 반환한다. -peek() : 큐가 비어있지 않으면 맨 앞 요소를 삭제하지 않고 반환한다. -is_full() : 큐가 가득 차 있으면 true을 아니면 false을 반.. 더보기
[자료구조] 스택(Stack) 이란? - 컴도리돌이 스택(Stack) 이란? 스택이란 말 그대로 쌓아놓은 더미로 기본적으로 후입선출 방식으로 가장 최근에 들어온 데이터가 가장 먼저 나가는 형식의 자료구조입니다. 스택(Stack)의 연산 - 삽입(push) , 삭제(pop) - is_empty() : 스택이 공백상태인지 검사 - is_full() : 스택이 포화상태인지 검사 - peek(s) : 요소를 스택에서 삭제하지 않고 보기만 하는 연산 스택(stack)의 활용 분야 - 자료의 출력이 입력 순서와 역순으로 이루어져야 하는 경우 유용하며, 문서나 그림, 수식 등의 편집기에서 되돌리기(undo) 기능 --- 수행된 명령어들 중에서 가장 최근에 수행된 것부터 순서적으로 취소할 경우 - 함수 호출에서 복귀 순서를 기록하는 데 사용 - 문서나 소스코드에서 괄호.. 더보기
[알고리즘] 삽입 정렬 (Insertion Sort) 이란? - 컴도리돌이 삽입 정렬(Insertion sort) 이란? -삽입을 사용하면서 정렬하는 알고리즘으로 삽입할 값(key)과 값(key)들이 정렬된 리스트가 있을 경우, 정렬된 리스트에 값을 삽입할 때 정렬된 순서를 보존하면서 삽입을 하는 것이 삽입 정렬이다.자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교 하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘 삽입 정렬(Insertion sort) 알고리즘 예제 배열에 5,2,4,6,1,3이 저장되어 있다고 가정하고 자료를 오름차순으로 정렬해 보았다. key 2 와 첫 번째 자료인 5를 비교한다. 5가 2보다 더 크므로 5를 2자리에 넣고 2를 5의 자리인 첫 번째에 기억시킨다. key 값 4랑 두 번째 자료인 5랑 비교한다. 5가 .. 더보기