1. 연결 리스트의 개념적인 이해
동적할당(malloc( ), free( ) 함수)을 진행한다.(프로그램 실행 중간에 할당한다.)
동적할당이란?
프로그램 실행중인 런타임에 메모리 공간을 확보한다.
Ex). 1024byte 메모리를 할당하고 1byte를 사용한다면, 비효율적이다. 필요한 만큼 메모리 공간을 확보하고 메모리 공간을 해제하는 것이 동적할당의 장점이다.
1.1 LinkedRead.c
#include <stdio.h>
#include <stdlib.h>
typedef struct _node
{
int data;
struct _node * next;
} Node;
int main(void)
{
Node * head = NULL; // 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(Node));
newNode->data = readData;
newNode->next = NULL;
if(head == NULL)
head = newNode;
else
tail->next = newNode;
tail = newNode;
}
printf("\n");
/**** 입력 받은 데이터의 출력과정 ****/
printf("입력 받은 데이터의 전체출력! \n");
if(head == NULL)
{
printf("저장된 자연수가 존재하지 않습니다. \n");
}
else
{
cur = head;
printf("%d ", cur->data); // 첫 번째 데이터 출력
while(cur->next != NULL) // 두 번째 이후의 데이터 출력
{
cur = cur->next;
printf("%d ", cur->data);
}
}
printf("\n\n");
/**** 메모리의 해제과정 ****/
if(head == NULL)
{
return 0; // 해제할 노드가 존재하지 않는다.
}
else
{
Node * delNode = head;
Node * delNextNode = head->next;
printf("%d을(를) 삭제합니다. \n", head->data);
free(delNode); // 첫 번째 노드의 삭제
while(delNextNode != NULL) // 두 번째 이후의 노드 삭제 위한 반복문
{
delNode = delNextNode;
delNextNode = delNextNode->next;
printf("%d을(를) 삭제합니다. \n", delNode->data);
free(delNode); // 두 번째 이후의 노드 삭제
}
}
return 0;
}
이해하기 쉬운 코드이므로 설명은 하지 않겠다.
아래의 그림을 참고하자.
Chapter 4의 경우 분량이 많아 ADT를 이용한 연결리스트 구현은 4-2에서 서술할 예정이다.
'개발 > 자료구조' 카테고리의 다른 글
Chapter 04-3. 연결 리스트(Linked List) 3 (0) | 2024.11.10 |
---|---|
Chapter 04-2. 연결 리스트(Linked List) 2 (0) | 2024.11.09 |
Chapter 03. 연결 리스트 (Linked List) 1 (3) | 2024.11.06 |
Chapter 02. 재귀 (Recursion) (0) | 2024.10.30 |
Chapter 01. 자료구조와 알고리즘의 이해 (0) | 2024.10.23 |