ft_lstnew 구현

yeonjkim·2021년 5월 23일
0

42seoul-libft

목록 보기
17/43

1. ft_lstnew 용도

* 인자로 받은 변수 content를 새 노드의 content로 써서 새 노드를 만드는 함수

* 새 노드의 content는 인자로 받은 content를, 새 노드의 next에는 NULL을 채워 새로운 노드를 만든다

2. 연결 리스트(linked list)분석

  • 연결 리스트는 배열과 같은 선형 자료구조로, 하단의 사진과 같이 노드들이 메모리 상에 연속적으로 저장되어 있지 않고 포인터로 연결되어 있는 리스트이다.

  • 링크드 리스트의 제일 첫 노드를 가리키는 포인터가 있다.(하단의 사진에서는 head 변수)

  • 각 노드들은 value를 저장하는 data 변수와 다음 노드의 주소값을 저장하는 포인터 변수 next로 구성된다.

3. *lst == NULL과 lst == NULL의 차이

  • lst가 NULL이면 리스트 자체가 존재하지 않는다는 뜻이다.

  • *lst는 lst의 첫번째 주소, head를 의미하므로 리스트 내에 노드가 존재하지 않는다는 뜻이다.

4. t_list와 ft_lstnew()

  • ft_lstnew 함수에서는 t_list 구조체의 인스턴스가 노드이며, t_list 구조체는 아래와 같다.
typedef struct          s_list
{
        void                    *content;
        struct s_list   *next;

}                                       t_list;
  • 또, ft_lstnew 함수에서 새 노드를 만드는 데 필요한 content는 파라미터로 전달된다. 이 void *content를 이용해 새 노드를 만들면 된다.

5. ft_lstnew 프로토타입

t_list	*ft_lstnew(void *content)
  • void *content : 새 노드의 content로 쓰일 인자인 보이드형 포인터 content. 
    다양한 자료형을 인자로 받아들일 수 있도록 보이드형 보인터를 이용했다.

6. 구현 시 유의사항

  • 만든 새 노드의 주소를 t_list형 포인터 new에 저장하는데, 만약 malloc으로 t_list의 크기만큼 메모리를 할당하지 못했을 때는 NULL을 반환한다.

  • 새 노드의 next에는 NULL, content에는 인자로 받은 content를 넣어준다.

7. 코드 구현

#include "libft.h"

t_list          *ft_lstnew(void *content)
{
        t_list  *new;

        if (!(new = (t_list*)malloc(sizeof(t_list))))//할당 실패 시 NULL 리턴
        {
                return (NULL);
        }
        new->next = NULL;
        new->content = content;
        return (new);
}

8. 코드 구현 방법

(1) 새 노드를 저장할 t_list 포인터 변수 new를 선언.
(2) malloc으로 new에 t_list의 크기만큼 메모리를 할당해주되, 할당 실패 시 NULL을 반환한다.
(3) 할당 뒤, new의 next에는 NULL을, content에는 인자로 받은 content를 대입.
(4) new 리턴.

0개의 댓글