[libft] 함수들 간단 정리 (Bonus Part)

hyeojung·2021년 5월 16일
0

42Seoul

목록 보기
6/16
post-thumbnail
post-custom-banner

libft 과제의 보너스 파트는 모두 연결 리스트 문제이다.
연결 리스트와 친하지 않아서 어렵게 생각했지만, 막상 해보니 할만했다! (만용일 수도,,,) 아무튼 어렵게 생각하고 포기하는 것보단 해보는 게 좋은 것 같다 🤗



subject 에서 정의하는 t_list :

typedef struct	s_list
{
	void		*content;
	struct s_list	*next;
} 		t_list;


ft_lstnew

t_list *ft_lstnew(void *content);

malloc 함수를 이용해 새로운 연결 리스트를 생성하는 함수.
포인터를 이용해 구조체 멤버에 접근하는 연산자는 -> 이므로 잘 활용하여 구조체의 content 멤버에 함수 호출 시 파라미터로 들어온 값을 넣어주면 된다.
새로운 리스트를 만드는 것이므로 리스트의 다음 요소를 가리키는 next 포인터는 널 포인터가 되게 해 주어야 한다.


ft_lstadd_front

void ft_lstadd_front(t_list **lst, t_list *new);

연결 리스트의 맨 앞에 새로운 요소를 추가하는 함수.
새로운 요소의 next 포인터가 원래 리스트의 첫 요소를 가리키도록 해 주고,
리스트의 처음을 가리키는 포인터가 새로운 요소를 가리키도록 해 주면 된다.


ft_lstsize

int ft_lstsize(t_list *lst);

리스트의 사이즈를 구하는 함수이다.
리스트의 요소를 가리키는 포인터를 널 포인터가 나올 때까지 다음 요소로 이동시키며 사이즈를 증가시키고 이를 반환한다.


ft_lstlast

t_list *ft_lstlast(t_list *lst);

리스트의 마지막 요소의 주소를 반환하는 함수이다.
요소의 next 포인터가 널이 아닐 때까지 다음 요소로 이동하다가, next 포인터가 널 포인터이면 그 요소의 주소를 반환한다.


ft_lstadd_back

void ft_lstadd_back(t_list **lst, t_list *new);

연결 리스트의 맨 뒤에 새로운 요소를 추가하는 함수.
나의 경우에는 lstlast 함수로 구한 마지막 요소의 next 포인터가 새로운 요소를 가리키도록 했다.
만약 연결 리스트가 비어 있을 경우에는 new라는 요소가 리스트의 첫 요소가 되도록 예외처리를 해 주었다.


ft_lstdelone

void ft_lstdelone(t_list *lst, void (*del)(void *));

주어진 리스트의 요소 하나를 지우는 함수.
리스트의 content를 삭제해 줄 del 함수의 포인터가 입력으로 주어진다.
del 함수에 lst->content를 파라미터로 넘겨 삭제해준 후 lst를 free 해주면 된다!


ft_lstclear

void ft_lstclear(t_list **lst, void (*del)(void *));

연결 리스트 전체를 지우는 함수.
리스트의 요소를 가리키는 포인터가 널 포인터가 아닌 동안 리스트의 각 요소의 content에 del 함수를 적용하고, 다음 요소로 넘어가며 계속 실행하도록 했다.


ft_lstiter

void ft_lstiter(t_list *lst, void (*f)(void *));

iter는 iterate의 줄임말로 반복하다 라는 뜻이다.
말 그대로 f 함수를 리스트의 모든 요소에 반복하여 적용하면 되는 함수이다.


ft_lstmap

t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *));

주어진 연결 리스트에 f 함수를 적용한 새로운 리스트(lstnew, lstadd_back 함수 활용)의 첫 노드의 포인터를 반환하는 함수.
만약 함수 적용 중 실패하면, del 함수로 모든 요소의 content 값을 초기화하고 free 한 후 널 포인터를 반환한다.


profile
응애 나 애기 개발자
post-custom-banner

0개의 댓글