주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 앞서 여러 Chapter에 걸쳐 공부한 리스트는 대표적인 선형 자료구조입니다. 그리고 이번에 배우게 될 스택이란 자료구조도 선형 자료구조의 일종입니다. 스택이란 총알을 저장하는 탄창에 비유할 수 있습니다. 아니면 차곡차곡 쌓이는 접시에도 비유할 수 있습니다. 이 둘의 공통점은 가장 마지막에 추가한 것일수록 가장 먼저 사용된다는 것에 있습니다. 총알의 경우 총알을 하나씩 탄창에 넣다 보면 가장 먼저 넣은 총알은 탄창의 가장 아래에 위치하게 됩니다. 그리고 가장 마지막에 넣은 총알이 탄창의 가장 위로 나옵니다. 따라서 이 탄창을 총에 ..
이번 연습문제에서는 양방향 연결 리스트의 완전한 구현을 요구합니다. 이유는 앞서 구현한 양방향 연결 리스트를 모델로 하여 조금만 수정하고 조금만 보태면 완성할 수 있기 때문입니다. 더미 노드 기반의 양방향 연결 리스트의 특징은 다음과 같습니다. 양방향 연결 리스트다. 더미 노드가 리스트의 앞과 뒤에 각각 존재한다. 포인터 변수 head와 tail이 있어서 리스트의 앞과 뒤를 각각 가리킨다. 이 경우 꼬리에도 더미 노드가 존재함에 유의합니다. 그리고 구현 범위를 제한한다는 의미에서 헤더 파일의 일부를 제공합니다. 즉, 아래에서 보이는 구조체의 함수를 기반으로 양방향 연결 리스트를 구현하면 됩니다. typedef struct Node { Data data; struct Node* next; struct No..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. '양방향 연결 리스트' 또는 '이중 연결 리스트'라고도 불리는 이 자료구조는 그 이름이 의미하듯 노드가 양쪽 방향으로 연결된 구조의 리스트입니다. 즉, 왼쪽 노드가 오른쪽 노드를 가리킴과 동시에 오른쪽 노드도 왼쪽 노드를 가리키는 구조입니다. 양방향 연결 리스트를 이해하기는 어렵지 않습니다. 지금까지 배운 연결 리스트를 크게 세 가지로 분류하자면 다음과 같습니다. 단순 연결 리스트 더미 노드 연결 리스트 원형 연결 리스트 위 세 가지 연결 리스트는 모드 한쪽 방향으로면 연결되는 단방향 연결 리스트입니다. 양방향 연결 리스트는 위 세..
앞서 구현한 원형 연결 리스트를 기반으로 다음 내용을 모두담고 있는 프로그램을 작성해 봅니다. 직원 정보를 등록할 수 있다. 직원 정보는 사번과 이름으로 구성이 된다. 직원 정보를 담을 수 있는 구조체를 정의하고, 이를 기반으로 대략 네 명의 직원 정보를 원형 연결 리스트에 저장합니다. 네 명의 직원 정보는 임의로 결정하기로 하고(프로그램 사용자로부터 입력받지 않아도 됩니다), 직원의 사번은 int형 변수에 담을 수 있다고 가정합니다. 그리고 원형 연결 리스트에는 구조체 변수의 주소 값을 저장하는 것을 원칙으로 합니다. 직원은 순서대로 돌아가면서 당직을 섭니다. 당직의 순서는 프로그램에 등록되는 등록 순서를 기준으로 결정됩니다. 예를 들어서 A, B, C의 순으로 직원이 등록되었다면 당직을 서는 순서도 ..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 이번에 소개하는 '원형 연결 리스트'는 앞서 소개한 단순 연결 리스트를 조금만 변경하면 쉽게 만들 수 있습니다. 따라서 그 구조를 이해하거나 구현하는 것은 어렵지 않습니다. 앞서 우리가 구현한 연결 리스트의 마지막 노드는 NULL을 가리켰습니다. 바로 이 마지막 노드가 첫 번째 노드를 가리키게 하면 이것이 바로 '원형 연결 리스트'가 됩니다. 그럼 꼬리가 다시 머리를 가리키게 하는 방법에 대해서 생각해 봅니다. 생각해보면 원형 연결 리스트를 구현하기 위해 tail 포인터가 필요하다는 생각이 듭니다. 하지만 그렇게 하면 원형 연결 리..
앞서 제시한 연습문제 04. 3에서는 다음 Point 구조체를 기반으로 한 예제의 작성을 요구했습니다. typedef struct Point { int xpos; int ypos; } Point; 그런데 당시에는 연결 리스트에 정렬의 기준을 등록하지 않았습니다. 하지만 이번에는 다음의 정렬 기준을 연결 리스트에 등록하여 그 결과를 확인하고자 합니다. x좌표의 값을 기준으로 오름차순 정렬이 되게 합니다. x좌표의 값이 같은 경우에는 y좌표를 대상으로 오름차순 정렬이 되게 합니다. 연습문제 04. 3의 답안에서 변경되어야 하는 파일은 main 함수가 담겨있는 소스 파일 하나여야 합니다. 제가 작성한 코드는 아래의 '더보기'를 클릭하여 확인할 수 있습니다. 혹시 이해가 되지 않거나 추가 설명이 필요하다면 언제..