인터넷에서 우연히 자료구조에 대해 알아보다 좋은 글이있어 제 생각을 덧붙여 포스팅합니다.

 

 

1. 자료구조를 공부하기 앞서

 (1) 자료란?

 

자료(Data)는 현실 세계로부터 수집한 사실이나 개념의 값 또는 이들의 집합입니다. 흔히 가공되지 않은 형태의 데이터를 자료라고 하며, 특정한 용도로 사용하기 위하여 자료를 처리/가공한 형태의 데이터를 정보(information)라고 합니다.

 

 (2) 자료구조

 

자료구조(Data Structure)란 자료의 집합을 의미하며, 각 원소들 사이의 관계가 논리적으로 정의된 일정한 규칙에 의하여 나열되며, 자료에 대한 처리를 효율적으로 수행할 수 있도록 자료를 조직적, 체계적으로 구분하여 표현한 것 입니다.

즉, 효율적으로 이용 할 수 있도록 설정하는 것인데요, 예시로 국어사전에서의 가나다순, 영어사전의 알파벳순을 생각하면 자료구조에 대해 쉽게 이해할 수 있습니다.

 

2. 자료구조 특징

 (1) 효율성

 

상황에 맞는 알고리즘을 사용하여 자료를 구조화시키기 때문에 효율적으로 동작합니다. 예시로, 모든 회원에게 사번과 이름의 쌍을 배열이라는 자료구조로 만들었을 때 사번으로 사원의 이름을 검색하려는 경우, 맨 끝의 번호에 위치할 때 처음부터 끝번호까지의 데이터 수 만큼 검색을 해야하는 불편함이 있습니다.

비효율적인 방법보다는 해시테이블과 같은 자료구조를 사용하면 비교적 빠르게 검색을 할 수 있습니다. 이처럼 상황에 맞는 적절한 자료구조를 이용하게 된다면 데이터 처리의 효율성을 높일 수 있습니다.

 

 (2) 추상화

 

추상화란 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려내는 것을 말합니다. 자료구조를 통해 데이터를 처리할 경우, 처리할 데이터를 어떻게 처리하는가 보단 어느 시점에 처리할 것인가에 초점을 둘 수 있기 때문에 프로그램의 비즈니스적인 데이터처리에 비교적 장점이 될 수 있습니다.

예를들어 스택의 경우 마지막에 삽입한 데이터를 가장 먼저 꺼내는 자료구조이고, push(), pop() 메소드를 통해 데이터를 삽입하고 꺼낼 수 있습니다.

또한 이러한 자료구조의 추상화는 실제 구현한 언어가 무엇인지에 따라 실제 그 코드는 다르지만, 추상적인 개념에 대해서만 알고 있으면 되기 때문에 언어에 종속적이지 않다는 특징을 가집니다.

 

 (3) 재사용성

 

자료구조를 이용하여 데이터를 처리할 경우 해당 자료구조의 인터페이스만 이용하여 데이터를 처리하도록 하므로 모듈화가 가능합니다. 이는, 자료구조를 설계할 때 특정 프로그램에 맞추어 설계하지 않고 다양한 프로그램에서 사용될 수 있도록 범용화하여 설계함으로써 가능합니다.

 

3. 분류

 (1) 단순 구조

 

- 정수, 실수, 문자, 문자열 등의 기본 자료형(위의 첨부에는 표시되어있지 않습니다.)

 

 (2) 선형 구조

 

- 자료들 간의 앞뒤 관계가 1:1의 선형관계

- List, LinkedList, Stack, Queue, Deque가 있습니다.

배열(Array)

가장 일반적인 구조로서 인덱스와 인덱스에 대응하는 데이터들로 이루어진 자료구조

LinkedList

각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 잇는 방식으로 데이터를 저장하는 자료구조

Stack

후입선출(LIFO)의 자료구조

Queue

선입선출의(FIFO) 자료구조

Deque

양쪽에서 모두 삽입/ 인출이 가능한 자료구조

 

(3) 비선형 구조

 

- 자료들 간의 앞뒤 관계가 '1:다', 또는 '다:다'의 관계

- 트리, 그래프 등

Tree

부모 노드 밑에 여러 자식 노드가 연결되고, 자식 노드가 무보가 되어 다시 각각의 자식 노드가 연결되는 재귀적 형태의 자료구조

Graph

정점(Vertex)과 정점들을 연결하는 변(Edge)으로 구성된 자료구조

 

(4) 파일 구조

 

- 레코드의 집합인 파일에 대한 구조

- 순차파일, 색인파일, 직접파일 등

 

 

 

 

참고자료

m.blog.naver.com/PostView.nhn?blogId=islove8587&logNo=220548856458&proxyReferer=https:%2F%2Fwww.google.com%2F

goodgid.github.io/DS-Linear-and-NonLinear/

'코딩 > 기타' 카테고리의 다른 글

Git README.md  (0) 2020.09.04
Git Github 원격저장소 폴더,파일 삭제  (0) 2020.09.02
DOM이란?  (0) 2020.07.26
ERD 표기법  (0) 2020.07.23
Ajax 비동기식 처리의 의미  (0) 2020.07.21
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기