ft_lstiter 구현

yeonjkim·2021년 5월 23일
0

42seoul-libft

목록 보기
14/43

1. ft_lstiter 용도

* f_list 포인터 lst와 그 lst에 연결된 모든 리스트의 content에 f를 적용하는 함수

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

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

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

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

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

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

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

4. t_list와 ft_lstiter()

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

}                                       t_list;
  • 또, ft_lstiter 함수에서 t_list 포인터 변수가 lst이며 lst의 content에 적용할 함수 포인터가 f()이다. 즉, lst는 t_list 포인터이며 lst의 content에 f를 적용시키기 위해 f함수를 이용해야 한다.

5. ft_lstiter 프로토타입

void	ft_lstiter(t_list *lst, void (*f)(void *))
  • t_list *lst : t_list 포인터
    
  • void (*f)(void *) : lst의 content에 f적용

6. 구현 시 유의사항

  • *lst는 포인터이므로 lst를 lst->next로 바꾸게 되면 호출한 함수 뿐만 아니라 전체 코드에서 lst의 값이 바뀌게 된다.
    --> 따라서 lst의 주소를 cur라는 t_list 포인터에 저장 후 cur을 이용해 리스트를 탐색한다.

  • cur을 이용해 리스트를 탐색하고, cur의 content에 f를 적용한 후 cur이 cur의 next주소를 가리키게 함.

7. 코드 구현

#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;
        }
}

8. 코드 구현 방법

(1) cur에 lst를 저장해 cur을 이용해 리스트를 탐색한다.
(2) cur이 NULL이 아닐 때 cur의 content에 f를 적용한다.
(3) cur이 cur의 다음 노드의 주소를 가리키게 한다.
(4) 2, 3을 반복한다.

0개의 댓글