Data Structure 9

순환(recursion, aka.재귀)

순환을 알아 보기에 앞서서 순환과 반복은 다르다는 것을 알아두자! 순환 : 알고리즘이나 함수가 수행 도중에 자기 자신을 다시 호출하여 문제를 해결하는 기법 반복 : 말그대로 반복하여 문제를 해결하는 기법 순환 순환(recursion)이란 어떤 알고리즘이나 함수가 자기 자신을 호출하여 문제를 해결하는 프로그래밍 기법이다. 순환은 많은 문제들을 해결하는데 독특한 개념적인 프레임 워크를 제공한다. 본질적으로 순환적인 문제나 그러한 자료구조를 다루는 프로그램에 적합하다. 팩토리얼 문제가 가장 잘 알려진 순환 문제이다. 다음 코드를 살펴보자. int factorial(int n) { if(n == 1) return 1; else return (n * factorial(n - 1)); } 위 함수를 살펴보면 팩토리..

리스트(list)

리스트란? 리스트(list) 또는 선형 리스트(linear list)는 자료를 정리하는 방법 중의 하나이다. 리스트에는 보통 항목들이 차례대로 정리되어 있다, 리스트의 항목들은 순서 또는 위치를 가진다. 리스트는 집합과는 다르다. 집합은 각 항목 간에 순서의 개념이 없지만 리스트에 들어 있는 항목들 사이에는 순서가 있다. 리스트는 스택, 큐, 덱과 같은 선형 자료구조이다. 이 때 선형이란 항목들이 일렬로 순서대로 들어 있는 것을 의미한다. 리스트와 이들 자료구조의 차이는 항목에 대한 접근 방법이다. 스택, 큐, 덱에서 자료의 접근은 전단(front)와 후단(rear)에 제한 되어 있다. → 세로운 항목에 대한 삽입이나 삭제 연산이 맨 앞이나 맨 뒤로 제한 되어있다. → 중간에 새로운 객체를 삽입하거나 삭..

연결 리스트(linked list)

연결리스트란? 스택과 큐 등의 자료구조를 배열을 이용하여 구현하면 구현이 간단하고 빠르다는 장점이 있지만 크기가 고정된다는 단점이 있다. 즉, 배열은 처음에 설정한 공간이 가득 차면 더 이상 데이터를 추가할 수 없다. 연결된 표현(linked representation)을 사용하면 이러한 문제를 해결할 수 있다. 연결된 표현은 데이터와 링크로 구성되어있고 링크가 노드들을 연결하는 역할을 한다. 연결된 표현의 특징 - 데이터를 한군데 모아두는 것을 포기한다. - 데이터들은 메인 메모리상의 어디에나 흩어져서 존재할 수 있다. - 순서를 유지하기 위해 각각의 데이터는 다음 데이터를 가리키는 줄을 가진다. - 첫 데이터에서부터 순서대로 줄을 따라가면 모든 데이터를 방문할 수 있다. 이와 같이 물리적으로 흩어져 ..