C언어로 구현한 단일 연결리스트(singly linked list)의 한 부분입니다.
리스트의 맨 뒤에 새로 생성한 노드를 추가하는 addNode 함수로
전역 변수를 사용하지 않고 이중 포인터를 사용해 구현했습니다.
#include <stdio.h>
#include <malloc.h>
typedef struct node{
int data;
struct node* next;
}NODE;
/*
전달받은 데이터를 저장하는 하나의 노드를 생성하는 함수
*/
NODE* createNode(int data)
{
// 동적할당으로 노드를 생성해준다.
NODE *temp = (NODE*)malloc(sizeof(NODE));
// 해당 노드가 가르키는 다음 노드의 주소 초기화
temp->next = NULL;
// 전달 받은 데이터를 저장
temp->data = data;
return temp;
}
/*
현재 리스트의 맨 뒤에 노드를 추가해주는 함수
*/
void addNode(NODE **head, int data)
{
// 전달받은 값을 저장하는 새로운 노드를 생성한다.
NODE *newNode = createNode(data);
// 헤드에 아무것도 없을 경우
// 즉, 현재 노드가 하나도 없을 경우
if(*head == NULL)
{
// 헤드에 생성한 노드를 연결
*head = newNode;
}
else
{
NODE *temp = *head;
// 마지막 노드를 찾는 루프
while(temp->next != NULL)
{
temp = temp->next;
}
// 마지막 노드일 경우 새로 생성한 노드 연결
temp->next = newNode;
}
}
int main(void)
{
// 리스트의 가장 처음 노드를 가르키는 포인터
NODE *head = NULL;
// 맨 뒤에 데이터 '10'을 가진 노드를 추가
addNode(&head, 10);
// 맨 뒤에 데이터 '20'을 가진 노드를 추가
addNode(&head, 20);
// 맨 뒤에 데이터 '30'을 가진 노드를 추가
addNode(&head, 30);
return 0;
}
결과 값을 보시면 아래와 같습니다.
head 포인터가 '10'이라는 데이터를 가진 노드를 가르키고 있고,
해당 노드는 '20' 이라는 데이터를 가진 다음 노드를 가르키고,
이 노드 역시 '30'이라는 데이터를 가진 노드를 가르키게 됩니다.
마지막 노드는 가르키는 노드가 없습니다.
'프로그래밍 언어들 > C' 카테고리의 다른 글
두 개의 쓰레드를 활용한 병합정렬(merge sorting) (0) | 2015.01.22 |
---|---|
단일 쓰레드 병합 정렬(Merge sorting) (0) | 2015.01.22 |
20141127_C언어 하트 피하기 게임 (0) | 2014.11.27 |
20141124_단일 연결리스트(singly linked list)_노드 삭제 함수(delNode) (0) | 2014.11.24 |
20141123_C언어 오목게임 (3) | 2014.11.23 |