[42-Seoul/Libft] Bonus 정리

yebeen·2022년 4월 8일
0

42-Seoul/Libft

목록 보기
3/3
post-thumbnail

Libft


info

이 구조체를 libft.h 파일에 추가하여야 합니다.

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

다음은 t_list 구조체의 각 필드에 대한 설명입니다 :

content: 요소에 포함된 데이터. void * 를 통해 어떠한 자료형의 값도 담을 수 있습니다.
next: 다음 요소의 주소 값. 만약 해당 요소가 마지막 요소라면, NULL을 가리킵니다.
다음의 함수들은 리스트를 쉽게 다룰 수 있도록 돕습니다.

  • ft_lstnew, ft_lstadd_front, ft_lstsize, ft_lstlast, ft_lstadd_back,
  • ft_lstdelone, ft_lstclear, ft_lstiter, ft_lstmap

Bonus

  • ft_lstnew
t_list *ft_lstnew(void *content);

인자로 받은 변수 content를 새 노드의 content로 써서 새 노드를 만드는 함수이다. 새 노드의 주소를 t_list형 포인터 new에 저장하고 반환하며 할당에 실패했을 경우 NULL을 반환한다.
추가하거나 삽입하는 함수는 아니기 때문에 next변수는 NULL로 초기화했다.
malloc 메모리 할당 이유
malloc을 해야 함수가 종료된 이후에도 메모리 상에 남아 할당 받은 메모리를 가리킬 수 있다.

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

연결 리스트의 맨 앞에 new라는 t_list 노드를 추가하는 함수이다. lst가 new를 가리키게 하여 리스트의 맨 앞에 new 노드를 추가하도록 한다.

  • ft_lstsize
int ft_lstsize(t_list *lst);

인자로 받은 lst의 길이를 구한다. 첫 노드를 가리키는 t_list의 lst 길이를 구해 반환한다.

  • ft_lstlast
t_list *ft_lstlast(t_list *lst)

lst가 마지막 노드를 가리키게 하는 함수이다. lst next가 NULL이 아닐 때 까지 탐색하도록 하고 이후 lst가 마지막 노드가 되면 값을 반환한다.


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

lst의 맨 뒤에 new라는 t_list 노드를 추가하는 함수이다. lst의 next가 NULL이 아닐 때까지 리스트를 탐색한 후 lst의 next에 new의 주소를 저장한다.

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

첫 번째 인자값으로 받은 요소의 content를 두 번째 인자로 받은 함수 포인터를 이용해 해제하는 함수이다. del함수를 통해 lst의 content를 free한다. content의 주소가 가리키는 값까지 삭제를 해줘야 하므로 del 함수를 통해 content를 먼저 free 한 후 lst를 free해줘야한다.

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

인자값으로 받은 요소와 그 뒤에 따라오는 리스트의 모든 요소들을 삭제하고 해제하는 함수이다. 삭제하기 전 t_list 변수에 다음 노드의 주소값을 넣고 이후 lst에 대입해 다음 노드의 주소를 가리킨다. lst가 빈리스트가 되었을 때 NULL로 처리해준다.

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

목록 lst를 반복하고 f함수를 반복ㅈ거으로 적용하는 함수이다.

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

연결 리스트의 각 content를 f함수를 저공한 새 연결리스트를 만들어 반환하는 함수이다. 새로운 노드 할당에 실패했을 경우, ft_lstclear()함수를 이용해 값을 모두 free해준다.


구조체 ?

구조체는 기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현하며 다양한 타입의 변수 집합을 하나의 타입으로 나타낸 것 입니다. 구조체를 구성하는 변수를 멤버 또는 멤버 변수라고 합니다.

typedef 키워드 ?

이미 존재하는 타입에 새로운 이름을 붙일 때 사용합니다. 또한 매번 struct키워드를 사용하여 구조체임을 명시해줘야하지만 typedef 키워드를 사용하여 구조체에 새로운 이름을 선언하면 struct 키워드를 사용하지 않아도 된다.

연결리스트 (linked list)

리스트를 구성하고 있는 가장 기본적인 단위를 노드라고 한다. 노드는 data를 저장할 공간과 다음 주소를 가리킬 공간을 필요로한다. 각각의 노드를 연결하면 연결리스트가 되는 것이다.
연결리스트는 필요할 때마다 데이터를 생성하여 연결하면 되기 때문에 메모리를 효율적으로 사용할 수 있는 장점이 있지만 탐색이 느리고 데이터를 저장할 공간과 다음 노드의 주소를 저장할 공간이 추가적으로 필요하다는 단점이 있다.

profile
🐣🐥

0개의 댓글