말로만하는 - 자료구조(for 기술면접)

면접에서 자료구조는 기본 질문 사항이다. 배열, 연결리스트, 스택/큐, 트리 등등을 공부하지 않은 사람은 없을것이다. 공부를 할 때는 코드도 있고 그림도 있어서 직관적으로 이해할 수 있다. 그러나 면접에서는 이것들을 로 표현할 줄 알아야 한다(중요성은 굳이 이야기하지 않아도 알 것이다..) 이 글에서는 자료구조를 ‘말’로만 표현할 수 있도록 정리해보았다. 예전에 사수님께서 기술을 설명할 때 ‘정의’와 ‘특징’을 나눠보라고 하셨다. 지금도 정리할 때에 종종 사용하는 방법인데, 간단 명료하면서 기술을 가장 잘 설명할 수 있는 방안이리라 확신한다.

자료구조의 분류

자료구조는 성격에 따라 아래와 같이 분류할 수 있다.

선형구조 배열, 리스트, 스택 큐
비선형구조 트리, 그래프

배열

연속적인 공간에 동일한 성질을 가지는 데이터를 저장하는 자료구조.
인덱스와 인덱스에 해당하는 데이터로 이루어진 자료구조.
An array is a simple data structure in which each element can be accessed directly.

리스트

불연속적인 메모리 공간에 데이터를 저장하는 선형 자료구조.
데이터를 저장할 때에 다음 데이터가 있는 공간의 주소를 가리키는 포인터도 같이 저장하여 자료를 이어준다.

스택

데이터를 한 쪽 끝에서 삽입하고 삭제하는 자료구조. LIFO(Last In Fist Out), 나중에 들어간 것이 먼저 나온다.
A stack is a sequentially ordered data structure that uses the LIFO.

데이터를 한쪽 끝으로 삽입하고 반대쪽 끝에서부터 삭제하는 자료구조. FIFO(First In First Out), 먼저 들어간 것이 먼저 나온다.
A queue is a sequentially ordered data structure that uses the FIFO.

트리

데이터 간의 계층 관계를 표현하는 비선형 구조의 자료구조이다. 시각적으로 표현했을 때에 나무를 뒤집어 놓은 모양을 하고 있어 tree라고 한다.
A tree is a data structure that can be used to represent data hierarchically. Data values in a tree are linked through parent-child relationship.

이진트리

트리의 한 종류로 각 노드의 차수(자식노드의 개수)가 2이하인 트리이다.

이진탐색트리

이진트리 중 부모노드를 기준으로 왼쪽 자식노드의 값은 부모노드의 값보다 작고, 오른쪽 자식노드의 값은 부모노드의 값보다 크다는 규칙을 만족시키는 자료구조이다.

해쉬

해쉬함수는 input값을 특정 연산을 하여 고정된 길이의 데이터로 리턴해준다.
해쉬테이블은 key:value형태의 데이터를 저장할 때, key를 해쉬함수의 input으로 넣고 output을 인덱스삼아 데이터를 저장하는 자료구조이다.