Developer

Bonus Part 본문

42seoul/Libft

Bonus Part

DPhater 2020. 9. 7. 10:40

1.ft_lstnew

  • Prototype
    t_list *ft_lstnew(void *content)

  • 함수 동작
    = 새로운 노드 하나를 생성하는 함수

  • 구현 방법
    = 리스트 구조체의 크기만큼 동적 할당을 해준 뒤 content에는 content를 next는 NULL을 가리키도록 하면 된다..

2.ft_lstadd_front

 

  • Prototype
    t_list *ft_lstadd_front(t_list **lst, t_list *new)

  • 함수 동작
    = 리스트의 맨 앞에 노드를 추가하는 함수

  • 구현 방법
    = 전달 인자로 들어온 lst 자체가 NULL인지 확인을 하고, lst가 가리키고 있는 곳의 값 (*lst)가 NULL이라면 현재 노드가 하나도 없는 상태이므로 *lst = new로 new를 추가하면 된다. 만약 리스트에 다른 노드들이 존재한다면 현재 맨앞을 가리키고 있는 포인터 lst가 new의 next가 되도록 하면된다.

  • 주의할 점
    = lst는 항상 리스트의 맨 앞을 가리키고 있어야 한다.

 

 

3.ft_lstsize

 

  • Prototype
    t_list *ft_lstsize(t_list *lst)

  • 함수 동작
    = 리스트의 노드 개수를 반환하는 함수

  • 구현 방법
    = lst가 NULL이 아닐 때까지(마지막 노드의 next는 NULL이다.) 반복하면서 size를 측정하면 된다.

 

 

4.ft_lstlast

 

  • Prototype
    t_list *ft_lstlast(t_list *lst)

  • 함수 동작
    = 리스트의 맨 마지막 노드를 반환하는 함수

  • 구현 방법
    = lstsize와 비슷하게 반복문을 활용하면 된다.

 

 

5.ft_lstadd_back

 

  • Prototype
    t_list *ft_lstadd_back(t_lsit **lst, t_list *new)

  • 함수 동작
    = new를 lst의 맨 마지막에 추가하는 함수

  • 구현 방법
    = 예외 처리 조건은 add_front와 같다.
    = tmp라는 임시 변수를 활용해도 되고 앞에서 만든 lstlast를 활용해도 된다.

 

6.ft_lstdelone

  • Prototype
    void ft_lstdelone(t_list *lst, void (*del)(void *))

  • 함수 동작
    = del을 사용해 lst의 content를 해제해주고 노드 자체도 free 해주는 함수

  • 구현 방법
    = 저는 lst가 존재하는지, 존재한다면 lst->content가 NULL이 아닌지 확인하는 과정을 진행한 뒤 삭제를 수행

 

 

7.ft_lstclear

  • Prototype
    void ft_lstclear(t_list **lst, void (*del)(void *))

  • 함수 동작
    = 리스트의 모든 노드를 지워주는 함수

  • 주의할 점
    = 노드를 지울 때 지우는 노드의 next에 대한 정보를 잃어서는 안된다.

 

 

8.ft_listiter

  • Prototype
    void ft_lstiter(t_list *lst, void (*f)(void *))

  • 함수 동작
    = 리스트의 각 노드들에 함수 f를 적용하는 함수

  • 구현 방법
    = 반복문을 사용하여 lst의 마지막 노드까지 함수 f를 호출하면 된다.
    = 이때 f는 void *타입의 전달 인자를 받으므로 lst->content를 전달 인자로 줘야 한다는 것을 알 수 있다.

 

 

9.ft_lstmap

 

  • Prototype
    t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *))

  • 함수 동작
    = 리스트의 각 노드에 함수 f를 한 결과로 새로운 리스트를 만드는 함수

  • 구현 방법
    = lst를 리스트의 마지막까지 반복하며 각 요소로 함수 f를 호출하여 새로운 리스트를 만들어 lstadd함수를 사용해 새로운 리스트의 뒤에 추가해주면 된다.

  • 주의할 점
    = del함수를 어디에 쓰는지 헷갈렸었는데 f의 결과로 새로운 리스트를 만드는 도중 할당에 실패하게 되면 이전까지 생성한 노드들을 전부 지워주기 위해 사용하는 것 같다.

 

 

 

'42seoul > Libft' 카테고리의 다른 글

Part2 Additional functions  (0) 2020.08.17
Part1 - Libc functions  (0) 2020.08.15
Comments