주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 이번 Chapter에서도 리스트에 대한 이야기를 이어갑니다. 다만 리스트의 특성을 설명하는 것이 아니라 '연결'을 기반으로 하는 다른 리스트의 구현 방법에 대해서 설명합니다. 다음 예제를 시작으로 '연결 리스트'에서의 '연결'이 의미하는 바의 설명을 진행하겠습니다. //main.c 소스 파일로 저장 #include int main(void) { int arr[10]; int readCount = 0; int readData; int i; while (1) { printf("자연수 입력 : "); scanf("%d", &readDat..
자료구조는 구현도 중요하지만 이에 못지않게 활용도 중요합니다. 실제로 이미 구현되어 있는 자료구조를 활용하는 것도 실력입니다. 따라서 다음 헤더 파일에 정의된 구조체를 기반으로 리스트를 활용하는 예제를 작성해 보기로 합니다. //NameCard.h 헤더 파일로 저장 #define NAME_LEN 30 #define PHONE_LEN 30 typedef struct { char name[NAME_LEN]; char phone[PHONE_LEN]; } NameCard; //NameCard 구조체 변수의 동적 할당 및 초기화 후 주소 값 반환 NameCard* MakeNameCard(char* name, char* phone); //NameCard 구조체 변수의 정보 출력 void ShowNameCardInf..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 현재 배우는 리스트는 연결 리스트를 말합니다. 그렇다고 '리스트는 연결리스트다'라고 생각하면 곤란합니다. 리스트라는 자료구조는 구현 방법에 따라서 다음과 같이 크게 두 가지로 나뉩니다. 순차 리스트 : 배열을 기반으로 구현된 리스트 연결 리스트 : 메모리의 동적 할당을 기반으로 구현된 리스트 순차 리스트와 연결 리스트 두 개로 분류하였지만 이 둘의 추상 자료형(ADT)은 동일할 수 있습니다. 하지만 두 리스트의 분류는 리스트의 구현 방법의 차이에서 비롯된 것이기 때문에 이 둘의 추상 자료형이 동일하다고 해서 문제가 될 것은 없습니다..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 드디어 첫 번째 자료구조를 배웁니다. 그런데 이에 앞서 '추상 자료형'이라는 용어를 먼저 소개하고자 합니다. 참고로 이 용어의 개념이 모호하다 하여 이에 대한 이해 없이 자료구조를 공부하는 경우도 있는데 이런 일은 없어야 한다고 저자는 말합니다. 문제를 하나 낼 테니 문제에서 설명하는 것이 무엇인지 맞춰보기 바랍니다. 여기에는 신용카드나 면허증과 같은 카드들을 넣고 뺄 수 있습니다. 여기에는 지폐나 동전도 넣을 수 있습니다. 이 문제의 답은 지갑입니다. 아마 다른 분들도 위 문제를 보고 지갑을 연상하는 데에 어려움은 없었을 것이라 ..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 이번에 소개하는 주제는 앞서 보인 예제들과 달리 재귀적으로 접근하지 않으면 해결이 쉽지 않은 문제입니다. 하노이 타워 문제는 재귀 함수를 대표한다고도 볼 수 있습니다. 혹시 하노이 타워가 무엇인지 모른다면 짧게 검색해보고 오길 권합니다. 하노이 타워에 대한 설명은 하지 않겠습니다. 하노이 타워 문제를 막연하게 생각하면 뭔가 복잡한 논리가 필요할 듯 보입니다. 하지만 하노이 타워 문제는 매우 매우 간단한 과정을 반복할 뿐입니다. 하노이 타워 문제를 풀기 위해서는 어찌 됐든 가장 아래쪽에 위치한 가장 큰 원반을 목표지점에 옮겨야 합니다..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 재귀함수는 이해하는 것도 중요하지만 잘 정의하는 것도 중요합니다. 그리고 재귀함수를 잘 정의하기 위해서는 사고의 전환이 필요합니다.. 그래서 사고의 전환을 위한 연습을 진행하고자 합니다. 우선은 간단하게 피보나치 수열부터 시작합니다. 피보나치 수열은 재귀적은 형태를 띄는 대표적인 수열로서 다음과 같이 전개가 됩니다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ... 쉽게 설명하자면 앞에 것 두 개를 더해서 현재의 수를 만들어가는 수열입니다. 때문에 처음 두 개의 수 0과 1이 주어진 상태에서 수를 만들어 가게..