본문 바로가기

자료구조

(4)
[자료구조] 그래프 그래프 그래프는 요소들이 서로 연결되어 있는 관계를 표현한 자료구조이다. 그래프는 정점(vertex)와 그들을 연결하는 간선(edge)의 집합으로 구성된다. 수학적으로는 다음과 같이 표시한다. (\G = (V, E)\) \(V(G)\)는 그래프 \(G\)의 정점의 집합, \(E(G)\)는 그래프 \(G\)의 간선의 집합 정점 A와 정점 B가 있다고 하면, 두 정점을 이어주는 간선은 (A, B)와 같이 정점의 쌍으로 나타낸다. 그래프는 정점과 간선의 집합이기 때문에, 한 그래프를 그리는 방법은 다양하다. 무방향 그래프(undirected graph) 간선에 방향이 표시되지 않은 그래프이다. 두 정점 A, B에 대하여 간선 (A, B)와 (B, A)는 동일한 간선이 된다. 현실의 것과 비유하자면, 지하철 노..
[자료구조] 우선순위 큐와 힙 우선순위 큐(Priority Queue) 우선순위 큐의 큐는 먼저 들어온 데이터가 먼저 나가는, 그 큐가 맞다. 둘의 차이점이라면, 우선순위 큐는 우선순위가 높은 데이터가 먼저 출력되는 것이 차이다. 아래와 같은 배열이 있다고 하자. Array arr[10] = { 1, 3, 4, 9, 6, 2, 7, 8, 10, 5 }; Priority_Queue pq[10]; 이 배열을 우선순위 큐(pq)에 저장된다고 하자. 큰 수에 우선순위가 주어진다고 하면, pq에는 아래와 같이 저장된다. Priority_Queue pq[10] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; 입력은 1, 3, 4, ..., 10, 5 순으로 되었지만, 우선순위 큐에는 큰 수부터 나열되어있다. 즉, 높은 우선순위..
[자료구조] 큐 큐 자료의 입력과 출력이 FIFO(First In First Out)의 형태를 띄는 자료구조이다. LIFO의 스택과는 달리, 먼저 들어간 자료가 먼저 출력된다. 입력은 뒤(rear)에서, 출력은 앞(front)에서 일어난다. 줄을 서서 차례를 기다릴 때를 생각해보자. 앞에 있는 사람의 뒤에 줄을 서 차례를 기다리다가, 앞 사람이 빠져야 나의 차례가 되는 것과 같다. 큐에는 선형 큐와 원형 큐가 있다. 선형 큐는 구현하기는 쉽지만, front와 rear가 배열의 끝에 도달하게 된다면? 더 이상 사용할 수 없게 된다. 배열 앞부분에 값이 남는 데도! 이 방식을 해결하려면 요소들을 앞으로 당기거나 하는 번거로움이 필요하다. 이 문제를 해결한 것이 원형 큐이다. 원형 큐에서는 front는 항상 맨 앞 요소의 앞..
[자료구조] 스택 스택 자료의 입력과 출력이 LIFO(Last In First Out : 후입선출)의 형태를 띄는 자료 구조이다. 마지막으로 입력된 자료가 먼저 나오게 된다는 말이다. 스택에서는 맨 윗부분(top)에서만 입출력이 가능하고, 중간에서는 불가능하다. 책을 상자에 넣을 때 차곡차곡 쌓다가, 중간에 있는 책을 꺼낼 때는 위에서 부터 꺼낸다고 생각하면 된다. 아래는 스택의 연산들이다. init() : 스택을 초기화한다. is_empty() : 스택이 비어있는지 확인한다. is_full() : 스택이 가득 차 있는지 확인한다. size() : 스택에 저장된 요소들의 수를 반환한다. push(x) : x를 스택의 맨 윗부분에 추가한다. pop() : 스택의 맨 윗부분에 있는 요소를 삭제하고 반환한다. peek() : ..