티스토리 뷰

주의 사항!

  • 이 글은 제가 직접 공부하는 중에 작성되고 있습니다.
  • 따라서 제가 이해하는 그대로의 내용이 포함됩니다.
  • 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다.


이 책은 C언어를 바탕으로 자료구조를 배웁니다. 그리고 C언어에 대한 공부가 먼저 수행되었다고 가정하고 쓰였습니다.


자료구조에서는 데이터를 표현하고 저장하는 방법에 대해서 설명합니다.

 

우리는 데이터를 저장한 경험이 있습니다. 넓은 의미에서 int형 변수도, 구조체의 정의도 자료구조에 속합니다. 뿐만 아니라 배열도 자료구조의 일종입니다.

 

물론 이제부터 공부하게 될 자료구조는 이렇게 단순하지 않습니다. 자료구조는 기본적으로 다음과 같이 분류할 수 있습니다.

선형구조 비선형구조 파일구조 단순구조
리스트
스택
트리
그래프
순차파일
색인파일
직접파일
정수
실수
문자
문자열

 

파일도 데이터를 저장하는 도구이기 때문에 파일의 구조도 자료구조에 포함이 됩니다. 하지만 이 책을 통해 공부할 대상은 선형구조와 비선형 구조 두 가지입니다.

 

선형 자료구조는 데이터를 선의 형태로 나란히 혹은 일렬로 저장하는 방식입니다. 반면, 비선형 자료구조는 그 이름이 의미하듯이 데이터를 나란히 저장하지 않는 구조입니다. 따라서 선형 자료구조에 비해 상대적으로 어렵습니다.


실무에서는 자료구조를 직접 구현하지 않고 검증된 라이브러리를 가져다 씁니다. 그리고 이것은 합리적인 선택입니다. 검증된 라이브러리를 활용하는 것이 안정성에서나 성능 면에서나 우월하기 때문입니다.

 

하지만 라이브러리를 잘 가져다 쓰려면 리스트가 무엇이고, 트리가 무엇인지 알아야 합니다. 그냥 아는 것이 아니라 각각의 특성을 정확히 이해해야 합니다. 친구들의 주소와 전화번호 정보를 저장하기 위한 자료구조를 선택한다고 가정해 봅니다. 이는 리스트로도 가능하고 트리로도 가능합니다. 그렇다면 무엇을 선택해야 할까요?

 

선탁을 하려면 각각의 자료구조를 잘 이해하고 있어야 합니다. 선택을 하는 데 있어서 자료구조의 구현 능력은 그리 중요하지 않을 수 있습니다.

 

즉, 자료구조를 구현하는 능력보다도 자료구조의 특성을 정확히 이해하는 것이 중요하다고 할 수 있습니다. 그렇다고 자료구조를 구현하는 능력이 도움 안 되는 것은 아닙니다. 코드 레벨에서 자료구조를 구현한 경험이 있다면 자료구조를 보는 깊이가 달라집니다. 뿐만 아니라, 자료구조의 구현 경험은 프로그래밍 능력을 향상해 줄 것입니다. 


자료구조가 '데이터의 표현 및 저장방법을 뜻한다면, 알고리즘은 이렇듯 표현 및 저장된 데이터를 대상으로 하는 '문제의 해결 방법'을 뜻합니다. 예를 들어서 다음의 배열 선언은 자료구조적 측면의 코드입니다.

int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

반면 배열에 저장된 모든 값의 합을 더하는 다음 반복문의 구성은 알고리즘적 측면의 코드입니다.

for(int i = 0; i < 10; i++)
{
	sum += arr[i];
}

위의 반복문은 '배열에 저장된  모든 값의 합을 구하는 알고리즘'이라고 할 수 있습니다. 이렇듯 자료구조와 알고리즘은 밀접한 관계를 갖습니다. 자료구조가 결정되어야 그에 따른 효율적인 알고리즘을 결정할 수 있기 때문입니다. 만약 값이 저장된 자료구조가 배열이 아니었다면, 위에서 보이는 바와 같이 반복문과 인덱스 값을 이용한 순차적 접근을 진행하는 방법이 아닌 다른 방법을 적용해야 했을 것입니다. 

 

이렇듯 자료구조와 알고리즘은 분명 다른 과목임에도 불구하고 매우 많은 연관성을 지니고 있습니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함