안녕하세요. 오늘은 C언어로 싱글 링크드리스트를 구현하는 예제를 살펴보겠습니다.
그 전에 우선, 싱글 링크드 리스트란 무엇인지 알아봐야겠죠?
싱글 링크드 리스트란 이처럼 머리부터 꼬리까지 연결되어 있는 구조를 말하는데요,
일반 배열과 차이점이 있다면 메모리 상에 데이터가 흩뿌려져 있다는 점이에요.
그래서 다음번지로 찾아가는 특별한 규칙이 있는 것은 아니지만
이전의 데이터가 다음의 데이터의 주소를 가지고 있는 구조로 되어 있습니다.
이로인한 문제점으로는 그 주소를 잃어버리게 되면
주소 잃은 포인터 현상이 나타날 수도 있기 때문에 주의하셔야 합니다.
그럼 예제를 살펴보겠습니다.
처음에 node라는 구조체를 정의하고 있습니다.
거기에는 data라는 int형 변수와 node* 타입의 link 변수가 있습니다.
즉, 다음 노드의 주소를 가지고 있다고 볼 수 있는데요.
typedef를 사용한 것은 일일히 struct node 입력하기가 귀찮아서
node라는 단어만으로도 strcut node의 의미로 사용할 수 있도록 하기 위해서
그렇게 한 것입니다.
함수 init_node 부분에서는 첫 노드에게 노드의 크기만큼 memory allocation을 하고,
그 다음 값은 NULL로 고정을 시킵니다. 즉 데이터가 들어가기 위한
공간을 확보한 것이라고 볼 수가 있습니다.
다음으로 print_node 부분에서는 root가 NULL이면 끝임을 알리고 있습니다.
모든 데이터가 추가된 상태에서 root 노드가 NULL을 가리킨다는 것은
노드 리스트에 대한 탐색을 마친 것이기 때문입니다.
다음 add_node에서는 탐색을 위한 search 노드를 만들고,
새로운 데이터를 넣기 위한 tmp 노드를 만듭니다.
이후, root에 아무것도 없다면 root에 tmp를 넣고 함수를 종료하고
그렇지 않을 경우에는 search를 사용해서 리스트의 가장 끝으로 이동한 다음에,
그곳에 tmp를 연결합니다.
이렇게 했을 경우 새로운 데이터를 추가하면 가장 끝에 추가가 되겠지요?
마지막으로 free_node 부분은 전체 node를 풀어주는 것입니다.
main 부분에서 임시 데이터로 10, 6, 98, 47, 68, 80을 add 해봤는데요
그럼 결과가 이렇게 나오겠죠?
이상으로 싱글링크드리스트에 대해서 알아보았습니다.
'프로그래밍 > C Programming' 카테고리의 다른 글
C언어 SelectionSort에 대해 알아보자 (0) | 2018.07.26 |
---|---|
C언어 별찍기 예제 (0) | 2018.07.24 |
C언어 예제를 통해 알아보는 포인터 (0) | 2018.07.23 |
Windows 10 - Ubuntu 공유폴더 설정하기 (0) | 2018.07.20 |
C언어 QuickSort 예시로 살펴보기 (0) | 2018.07.19 |