Algorithms + Data Structures.jpg

스위스의 컴퓨터 과학자인 니클라우스 비르트(Niclaus Wirth)는 교육용 프로그래밍 언어인 파스칼과 다양한 프로그래밍 언어를 설계하였는데, 그는 자신의 프로그래밍 책을 ‘알고리즘 + 자료구조 = 프로그래밍’ 이란 제목으로 출간했다. 즉, 프로그래밍은 알고리즘과 자료구조가 합쳐진 개념으로, 프로그래밍에는 알고리즘 뿐만이 아니라 자료구조도 아주 중요한 개념이다. 오늘은 자료구조의 의미와 종류에 대해 알아본다.

자료구조의 의미

알고리즘과 자료구조의 의미를 살펴본다.

알고리즘의 개념적 의미는 “문제 해결(Problem solving)”이며 “특정 문제를 풀기 위한 단계적인 절차이자 명령어들의 집합”이라 할 수 있다.

자료구조는 컴퓨터에서 처리할 자료들을 구조적으로 어떻게 표현하여 처리할 것인가에 대한 것으로 자료를 저장하는 방법과 자료에 적용할 수 있는 연산을 구체적으로 제공한 것이다.

자료구조란 말 그대로 자료를 저장하는 구조를 말한다. 프로그램에 필요한 자료를 효율적으로 담기 위해 자료구조를 배운다. ‘그릇’ 이라는 추상적 자료형이 있고, 그릇에 음식을 어떻게 담을 것인지, 그릇을 이용하여 어떻게 음식을 먹을 수 있는지 명확히 구현된 것을 자료구조라 할 수 있다.

자료구조는 형태에 따라 장단점이 존재하며 구현하고자 하는 프로그램의 성능을 고려하여 알맞은 자료구조를 선택해야한다. 프로그램에서 특정 알고리즘을 구현하기 위해서는 적절한 자료구조를 사용해야 좋은 성능을 낼 수 있다.

자료구조의 종류

자료구조는 종류에 따라 저장된 자료에 접근하는데 방법의 차이가 존재한다. 자료구조의 대표적인 종류는 아래와 같다.

  • 배열(Array)
  • 연결 리스트(Linked List)
  • 큐(Queue)
  • 스택(Stack)
  • 그래프(Graph)
  • 트리(Tree)

이를 선형구조에 의해 분류하면 아래처럼 나뉠 수 있다.

  • 선형구조
    • 순차 리스트: 배열, , 스택
    • 연결 리스트
  • 비선형구조: 트리, 그래프

그 연관도에 따라 [배열, 연결 리스트] [스택, 큐] [트리, 그래프] 순으로 묶어 배우면 좋다.