Programming/Data Structure

[Data Structure] 자료구조 (Data Structure)

MB Kyle KWON 2012. 12. 29. 23:00

자료구조 : 데이터들의 관계를 구조화한 것


자료구조의 분류

선형 자료구조 : 리스트, 스택, 큐

비선형 자료구조 : 트리, 그래프




●배열(Array)

-타입이 동일한 데이터들의 집합

-연속된 공간의 메모리를 할당

-인덱스를 통하여 자료의 순서와 위치를 표시

-인덱스를 이용하여 직접적으로 자료에 접근 가능




●리스트(List)

-특정원소의 탐색

-머리(Head)부터 꼬리(Tail)까지 순차탐색

-i번째 원소의 삽입, 삭제


배열리스트(Array List)

탐색 : 머리(Head)부터 순차탐색 가능, 인덱스를 이용한 직접 접근 가능


삽입 : 끝에 삽입하면 해당 메모리 주소에 삽입, 중간에 삽입하면 이후의 모든 데이터를 뒤로 밀고 삽입


삭제 : 끝에 있는 자료는 바로 삭제, 중간에 있는 데이터는 삭제 후에 이후의 데이터를 모두 당긴다.


장점 : 인덱스를 이용한 데이터의 직접적인 접근이 가능하다.


단점 : 삽입, 삭제 시에 다른 데이터들의 위치를 바꿔줘야 한다.


연결리스트(Linked List)

탐색 : 인덱스를 이용하여 직접 접근이 불가능하다. 머리(Head)부터 순차적으로 접근해야 한다.


삽입 : 삽입할 노드를 만든 다음 삽입할 위치의 앞의 노드의 포인터가 삽입할 노드를 가리키게한다. 이어질 노드는 삽입한 노드의 포인터가 가르키게한다.터가 가르키게한다.


삭제 : 삭제할 노드가 가르키는 노드를 이전 노드의 포인터가 가르키게한다. 삭제할 노드의 메모리를 해제한다.


장점 : 데이터의 삽입, 삭제 시에 데이터의 이동이 없다.


단점 : 자료에 직접적으로 접근을 할 수가 없다. 또한 노드를 가르키는 포인터로인해 메모리를 더 사용한다.




●스택

-한 쪽에서만 삽입, 삭제가 일어난다.

-가장 위쪽을 가르키는 포인터를 TOP이라고 한다.

-한 쪽 끝에서만 삽입, 삭제가 일어나기 때문에 가장 나중에 삭제된 테이터가 제일 먼저 삭제된다.


스택 - Overflow와 Underflow

오버플로우(Overflow) : 스택이 가득 차 있는 상태에서 Push(삽입)작업을 하면 발생한다.

언더플로우(Underflow) : 스택이 비어 있는 상태에서 Pop(삭제)작업을 하면 발생한다.




●큐

-한 쪽에서 삽입이 일어나고 다른 끝에서 삭제가 일어나는 자료구조

-삽입이 일어나는 끝을 가르키는 포인터를 Rear라고 한다.

-삭제가 일어나는 끝을 가르키는 포인터를 Front라고 한다.

-가장 먼저 삽입된 데이터가 가장 먼저 삭제된다.


큐 - Overflow와 Underflow

오버플로우(Overflow) : 큐가 가득 차 있는 상태에서 Insert(삽입)작업을 하면 발생한다.

언더플로우(Underflow) : 큐가 비어 있는 상태에서 Remove(삭제)작업을 하면 발생한다.




●트리

-계층적 구조를 나타내는 자료구조

-컴퓨터 디스크의 구조, 인공지능의 결정트리에 이용


트리의 객체(Object)

루트노드 : 트리의 최상단 노드

부모노드 : 해당 노드의 위에 연결된 노드

자식노드 : 해당 노드의 밑에 연결된 노드

형제노드 : 같은 부모노드에 연결되어 있는 노드


트리의 종류

이진 트리 : 각 노드의 자식노드의 수가 2이하인 트리


완전이진 트리 : 이진트리 중에 마지막 레벨을 제외한 모든 레벨의 노드가 최대의 수를 충족하고 마지막레벨은 왼쪽부터 마지막 노드까지 가득 차있는 트리


경사 트리 : 왼쪽 혹은 오른쪽으로 노드들이 한 쪽 방향으로 치우친 트리


트리의 표현방법

배열 : 거의 채워져 있는 이진트리를 구현할 때, 탐색이 용이하고 구현이 간편하며 메모리활용이 효율적이다.


연결리스트 : 노드가 거의 채워지지 않은 트리 혹은 경사트리를 구현할 때 효율적이다.


트리의 변형

이진탐색트리

AVL 트리

2-3 트리

2-3-4 트리




●그래프

-연결되어 있는 객체 간의 관계를 표현하는 자료구조

-최단거리나 최대, 최소비용을 구할 때, 그래프를 이용한 신장트리 사용


그래프의 객체(Object)

정점(Vertax) : 그래프의 각 객체, 노드

간선(Edge) : 그래프의 각 객체를 잇는 간선, 링크라고도 부른다.


그래프의 종류

무방향 그래프 : 간선을 통하여 양방향으로 갈 수 있음.

방향 그래프 : 간선을 통해 한 쪽 방향으로만 갈 수 있음.


그래프의 탐색방법

깊이우선탐색(DFS) : 재귀호출을 이용한 묵시적 스택 사용을 이용한 방법

너비우선탐색(BFS) : 큐를 이용한 탐색방법 가까운 정점부터 방문하는 방법




'Programming > Data Structure' 카테고리의 다른 글

[Data Structure] B-tree 정의 및 장/단점  (0) 2015.12.02