글을 쓰기에 앞서, C언어를 기반으로 서술함을 알립니다. 

자료구조(Data Structure)

자료구조의 사전적 의미는 이렇다.

컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장을 의미한다.
더 정확히 말해, 자료 구조는 데이터 값의 모임, 또 데이터 간의 관계,
그리고 데이터에 적용할 수 있는 함수나 명령을 의미한다.

위키백과 '자료구조' 中

어려워 보이지만, 생각보다 자료구조는 일상에서 많이 접할 수 있다. 

 

가령 사전같은 경우, 한 언어의 거의 모든 단어(자료)가 체계적으로(구조적으로) 담겨져 있다.

가끔씩 길거리에서 볼 수 있는 트럭 안의 쌓인 박스들도 자료구조의 한 모습일 수 있다.

회사 내 조직도 또한 자료구조의 한 모습이고, 

To-Do List 도 마찬가지다. 

 

자료구조는 쉽게 말하자면, 자료가 구조적으로 모여있는 것. 
컴퓨터과학 입장에선, 프로그램에서 처리할 자료를 표현, 저장하는 구조이다. 

 

 

알고리즘(Algorithm)

그럼, 자료구조와 알고리즘은 어떤 관계를 맺고 있는가?

 

알고리즘의 사전적인 정의는 이렇다.

알고리즘(영어: algorithm)은 수학과 컴퓨터과학에서 사용되는,
문제 해결 방법을 정의한 '일련의 단계적 절차'이자
어떠한 문제를 해결하기 위한 '동작들의 모임'이다.
계산을 실행하기 위한 단계적 규칙과 절차를 의미하기도 한다.

위키백과 '알고리즘' 中

 

자료구조보다 이해가 어려울 수 있다. '실행하기 위한 규칙과 절차'를 비교적 간단하게 적용해보자면,

사전에서 '커피'를 찾기 위해선 ㅋ 으로 시작하는 단어의 시작점에 접근해야 하고,

순서대로 ㅓ -> ㅍ -> ㅣ 순으로 찾지 않겠는가. 

맨 밑에 깔린 박스를 꺼내기 위해 위의 박스를 차근차근 내려놔야 하고,

To-Do List를 보며 어떤 계획을 먼저 실행하며 그 다음 실행할 계획은 무엇인지 생각하는 것.

 

실행하기 위한 규칙과 절차를 여기에 비유할 수 있겠다. 

컴퓨터과학 입장에선, 주어진 문제를 해결하는 개략적인 절차다. 

 

자료구조 + 알고리즘 = Program

 

자료구조 + 알고리즘 = Program 이다.


최대값 탐색 프로그램을 만들어야 한다고 가정하자.

1) 수를 저장하고 있는 자료구조 가 필요하고, 

2) 최대값을 탐색할 수 있는 알고리즘 이 필요할 것이다.

 

 

알고리즘의 기술 방법

알고리즘의 기술 방법은 다음과 같다.

 

1) 자연어

˙ 일상생활에서 사용하는 언어를 사용해 알고리즘을 기술함

장점 : 쉽고, 용이함 

단점 : 컴퓨터의 입장을 고려하지 않았음. 명확한 의사 전달이 어려움

 

2) 순서도(Flow Chart)

˙ 미리 약속된 기호나 그림 등으로 알고리즘을 기술함

장점 : 이해하기 쉬움.

단점 : 규모가 클 경우, 복잡해질 수 있음. 세밀한 부분은 기술이 어려움.

 

3) 의사 코드(pseudo-code)

˙ 프로그래밍 언어의 형태를 일부 사용하면서 자연어를 부가적으로 기술함

장점 : 어떤 프로그래밍 언어로도 구현이 가능함.

단점 : 프로그래밍 논리를 시각적으로 표현하지 않음. for문의 의사코드를 작성할 때

적절한 형식이 존재하지 않음. 문서 유지관리가 필요함. 

 

4) 특정 프로그래밍 언어

˙ 프로그래밍 언어를 사용해서 알고리즘을 기술함

장점 : 컴퓨터랑 직접 소통할 수 있음.

단점 : 사용자가 언어를 이해해야 함.

 

+ 알고리즘이 되기 위한 조건

1. 입력  : 0개 이상의 입력이 존재해야 한다. 

2. 출력  : 1개 이상의 출력이 존재해야 한다.

3. 명백성  : 각 명령어의 의미는 모호하지 않고 명확해야 한다.

4. 유한성  : 한정된 수의 단계 후에는 반드시 종료되어야 한다.

5. 유효성  : 각 명령어들은 종이와 연필, 또는 컴퓨터로 실행 가능한 연산이어야 한다.

 

 

자료구조의 종류

자료구조의 종류는 다음과 같다.

 

1. 배열(Array) : 1차원적인 집합

인덱스는 1부터 시작한다.

 

2. 구조체(Structure) : 타입이 다른 데이터를 묶는 집합

Structure는 서로 타입이 다른 데이터를 묶을 수 있다.

 

 

3. 스택(Stack) : 후입선출(LIFO)의 형태를 가진 자료구조

 

 

4. 큐(Queue) : 선입선출(FIFO)의 형태를 가진 자료구조

 

5. 리스트(List) : 순서를 가지고 일렬로 나열한 원소들의 모임

 

위의 5가지 외에도 힙(Heap), 트리(Tree), 그래프(Graph), 해시 테이블(Hash Table)이 있지만 여기선 생략하겠다. 

 

 

 

기본 개념은 2강에서부터 서술하겠다.

 

 

[자료구조] 2. 자료구조 기본 개념

[자료구조] 1. 자료구조 쉽게 이해하기 글을 쓰기에 앞서, C언어를 기반으로 서술함을 알립니다. 자료구조(Data Structure) 자료구조의 사전적 의미는 이렇다. 컴퓨터 과학에서 효율적인 접근 및 수정

w8err.tistory.com

 

728x90
반응형