더미 노드의 유무에 따른 코드의 변화를 직접 경험하는 것은 코드의 이해력을 높이는데 도움이 됩니다. 그래서 앞서 다루었던 예제 #include #include typedef struct Node { int data; struct Node* next; } Node; int main(void) { Node* head = NULL; Node* tail = NULL; Node* cur = NULL; Node* newNode = NULL; int readData; //데이터를 입력 받는 과정 while (1) { printf("자연수 입력 : "); scanf("%d", &readData); if (readData < 1) break; //노드의 추가 과정 newNode = (Node*)malloc(sizeof(..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 앞서 다룬 예제도 연결 리스트로 볼 수 있지만, 완벽한 형태의 연결 리스트는 아니었습니다. 이번 시간부터 본격적으로 연결 리스트를 공부하게 됩니다. 처음 공부할 내용은 연결의 형태가 한쪽 방향으로 전개되고 시작과 끝이 분명히 존재하는 '단순 연결 리스트'입니다. 기능적으로 무엇인가를 변경하거나 추가하지 않는다면 ADT를 변경할 이유는 없습니다. 하지만 이번 시간에는 연결 리스트에 정렬 관련 기능을 추가하기 위해서 ADT를 조금 확장하고자 합니다. 확장된 ADT는 다음과 같습니다. void ListInit(List* plist); v..
앞서 소개한 연결 리스트 예제 #include #include typedef struct Node { int data; struct Node* next; } Node; int main(void) { Node* head = NULL; Node* tail = NULL; Node* cur = NULL; Node* newNode = NULL; int readData; //데이터를 입력 받는 과정 while (1) { printf("자연수 입력 : "); scanf("%d", &readData); if (readData data = readData; newNode->next = NULL..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 이번 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)은 동일할 수 있습니다. 하지만 두 리스트의 분류는 리스트의 구현 방법의 차이에서 비롯된 것이기 때문에 이 둘의 추상 자료형이 동일하다고 해서 문제가 될 것은 없습니다..