주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 다음은 노드를 표현한 구조체의 정의입니다. 그리고 연결 리스트의 구현에서 이는 결코 빠지지 않습니다. typedef struct Node { LData data; struct Node* nest; } Node; 그런데 연결 리스트의 구현에 필요한 다음 유형의 변수들은 별도의 구조체로 묶이지 않고 그냥 main 함수의 지역변수로 선언하기도 하고, 더 나쁜 경우에는 전역 변수로 선언하기도 합니다. Node* head; Node* cur; 위 유형의 포인터 변수들은 전역 변수로도, main 함수의 지역변수로도 선언해서는 절대 안 됩니다...
더미 노드의 유무에 따른 코드의 변화를 직접 경험하는 것은 코드의 이해력을 높이는데 도움이 됩니다. 그래서 앞서 다루었던 예제 #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..