일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 포인터
- ft_server
- 자료형
- 2차원배열
- cout
- docker
- libft
- iF
- 42
- Class
- While
- else if
- nginx
- jupyter 단축키
- 42cursus
- 패킹
- vs코드 단축키
- 42서울
- C++
- 42Seoul
- list
- 동적할당
- float
- for
- 구조체
- 함수
- phpmyadmin
- python
- Double
- C언어
- Today
- Total
Developer
Bonus Part 본문
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 |