ft_lstiter

jaehlee·2025년 4월 27일

Libft

목록 보기
24/26

linked list 설명

배열(Array) & 연결리스트(Linked List)
해당 페이지에 설명해두었음.

ft_lstiter를 구현하기 위해 libft.h파일에

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

이 구조체를 추가해야한다.

1. ft_lstiter란?


리스트의 모든 노드를 순회하면서 각 노드의 content에 f함수를 적용하는 함수이다.

2. 함수 프로토타입

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

3. 함수구현

#include "libft.h"

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

	cur = lst;
	while (cur)
	{
		f(cur->content);
		cur = cur->next;
	}
}

작동방식

  1. 리스트가 끝날때까지 현재 노드의 content에 대해 함수 f를 호출한다
  2. 다음 노드로 이동해서 반복한다.

사용예시

void to_upper(void *content)
{
    char *str = (char *)content;
    while (*str)
    {
        if ('a' <= *str && *str <= 'z')
            *str -= ('a' - 'A');
        str++;
    }
}

void del(void *content)
{
    free(content);
}

int main(void)
{
    t_list *list = NULL;
    t_list *node1, *node2, *node3;
    t_list *cur;

    node1 = ft_lstnew(strdup("hello"));
    node2 = ft_lstnew(strdup("world"));
    node3 = ft_lstnew(strdup("libft"));

    if (!node1 || !node2 || !node3)
        return (1);

    ft_lstadd_back(&list, node1);
    ft_lstadd_back(&list, node2);
    ft_lstadd_back(&list, node3);

    ft_lstiter(list, to_upper);

    cur = list;
    while (cur)
    {
        printf("%s\n", (char *)cur->content);
        cur = cur->next;
    }

    ft_lstclear(&list, del);

    return (0);
}
profile
공부하는 개발자

0개의 댓글