본문 바로가기

반응형

프로그래밍/자료구조

(6)
[자료구조] 5_2. Heap 1. 정의힙(Heap)이란 완전이진트리(Complete Binary Tree)를 기본으로 하는 Tree-based 자료 구조이다. Heap은 기본적으로 다음과 같은 조건을 만족한다. A가 B의 부모 노드이면, A 노드의 value와 B 노드의 value 사이에는 대소관계가 성립한다. 위의 조건을 만족하는 Heap으로 Max Heap과 Min Heap을 생각해볼 수 있다. Max Heap의 경우 부모 노드가 항상 자식 노드보다 큰 경우이고, Min Heap의 경우는 그 반대로 부모 노드가 항상 자식 노드보다 작은 경우가 된다. 이러한 원리에 의해서 당연히 Max Heap의 Root는 가장 큰 값이 될 것이고, Min Heap의 Root는 가장 작은 값이 될 것이다. Heap의 규칙에 의해 Root는 항상 ..
[자료구조] 5. Tree 1. 정의Tree 구조는 Stack, Queue와 같은 선형적인 구조가 아니라 계층적인 구조를 가지고 있다. 계층적인 자료구조의 모습이 마치 나무와 비슷하게 보여, Tree라는 이름을 가지게 되었다. 자료를 Tree 구조로 저장하기 위해서는 나무의 잎인 Node에 데이터를 저장하고, 그 Node들의 연결을 가지(Branch)인 선분으로 연결한다. Graph의 측면에서 볼때, Tree는 cycle이 존재하지 않는 graph의 특수한 형태이다. 2. Tree 용어 정리- Node(노드) : Tree를 구성하는 기본 원소들을 말한다.- Root Node(루트 노드) : Tree를 구성하는 노드 중 가장 위의 노드를 일컫는다.- Parent : 어떤 노드의 Branch로 연결된 바로 위의 노드를 말한다.- Ch..
[자료구조] 4. Deque 1. 정의데크(Deque)는 Doubly-ended Queue의 약자이다. 흔히 Head-Tail Linked List라고도 불리며, List의 양쪽 끝 모두에서 데이터의 삽입과 삭제가 가능한 자료 구조이다. Stack과 Queue의 장점만을 모아 만들어졌다고 한다. 삽입/삭제가 모두 가능한 양쪽 끝을 부르는 명칭은 많으나, Queue와 동일하게 Front와 Rear를 사용하도록 하자. 2. 종류Deque에는 제약조건을 주어서 사용 목적에 따라 다르게 사용할 수 있다. 입력이 한쪽에서만 가능하고 출력은 양쪽에서 모두 가능하도록 하는 Deque는 Scroll이라고 하며, 출력이 한쪽에서만 가능하고 입력이 양쪽에서 모두 가능하도록 한 Deque는 Shelf라고 한다. 1) Scroll(입력제한데크) 2) S..
[자료구조] 3. Queue 1. 정의Queue의 가장 큰 특징은, FIFO구조를 가지고 있다는 것이다. Stack구조와 마찬가지로 데이터를 쌓아서 저장한다. 다만 Stack에서는 데이터의 입출력 모두 Top에서 일어나는데 반면, Queue에서는 입력은 back(rear)에서 출력은 front에서 발생하게 된다. 이 때, Queue에서의 입력을 Enqueue라고 말하며, 출력을 Dequeue라고 말한다.(하지만 Insert, Delete를 쓰기도 하며, Stack과 동일하게 push,pop을 쓰기도 한다.) 흔히, Queue를 설명 할 떄, 줄 서기를 비유한다. 매표소에 일렬로 선 줄처럼 먼저 온사람이 먼저 티켓을 사는 구조라고 생각하면 된다.※ FIFO : First-In-First-Out, 즉 가장 먼저 들어온 데이터가 먼저 빠..
[자료구조] 2. Stack 1. 정의Stack은 원소의 집합체로, 흔히 LIFO 구조의 시스템이라고 말한다. 간단히 말해 데이터를 위로 쌓는 형태처럼 저장하며, 항상 Stack의 가장 위에 데이터를 추가하거나 삭제할 수 있다. 입력(push)과 출력(pop)은 항상 스택의 Top에서 발생한다. 일반적으로 Stack에 추가적인 공간이 없는 경우, 더 이상의 데이터를 추가하지 못할 때의 상태에서 Push하는 경우 Overflow가 발생할 수 있다.※ LIFO : Last-In-First-Out. 즉 나중에 들어온 데이터가 먼저 나가짐을 의미한다. 2. 구현1) By List 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495..
[자료구조] 1. Linked List 1. 정의Linked List는 data를 link를 이용해 저장하는 자료구조이다. 각각의 data와 link는 Node라고 불리는 Struct에 저장된다. 즉 Linked List는 자료가 저장된 Node를 연결시켜 구성할 수 있다. Linked Lint는 가장 일반적이고, 기초적인 자료구조로서 Stack, Queue와 같은 자료구조에 응용되기도 한다.Linked List는 각각의 Node를 메모리에서 할당받아 사용하기 때문에, Array와 같이 선형적인 구조가 아니다. 따라서, Linked List는 Data의 논리적인 순서와 물리적인 순서는 다르게 된다.(Linked List의 Node가 메모리에 순서대로 할당되지 않는다. 메모리 어디든 할당받고 Link를 이용해서 연결하기만 하면 되기 때문.) L..