728x90
[이전 글]
Bonus part
- 필수 파트의 과제를 모두 수행하셨다면, 그보다 더 나아가는 것도 좋은 경험이 될 거예요. 이 마지막 섹션을 통해 보너스 점수를 얻어 보세요.
- 메모리와 문자열을 다루는 함수는 아주 유용하게 사용할 수 있죠. 지금부터 여러분은 리스트를 다루는 함수가 얼마나 더 유용한 지 알 수 있을 거에요.
- make bonus는 libft.a 라이브러리에 보너스 함수들을 추가합니다.
- 리스트의 요소들을 표현하기 위해 다음과 같은 구조체를 사용하세요.
이 구조체를 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
반응형
구조체란 ?
구조체는 기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있다. 다양한 타입의 변수 집합을 하나의 타입으로 나타낸 것으로 구조체를 구성하는 변수를 멤버 또는 멤버 변수라고한다.
typedef 키워드 ?
이미 존재하는 타입에 새로운 이름을 붙일 때 사용한다. 또한 매번 struct 키워드를 사용하여 구조체임을 명시해줘야하지만 typedef 키워드를 사용하여 구조체에 새로운 이름을 선언하면 struct 키워드를 사용하지 않아도 된다.
위와 같이 typedef 키워드를 사용하여 구조체의 정의와 선언을 동시에 할 수도 있다.
ft_lstrnew
t_list *ft_lstnew(void *content);
- 인자로 받은 변수 content를 새 노드의 content로 써서 새 노드를 만드는 함수이다.
- 새 노드의 주소를 t_list형 포인터 new에 저장하고 반환한다.
- 할당에 실패했을 경우 NULL을 반환한다.
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 노드를 추가하는 함수이다.
- _front와 비슷하나 lst의 next가 NULL이 아닐 때까지 리스트를 탐색한 후 lst의 next에 new의 조소를 저장했다.
ft_lstdelone
void ft_lstdelone(t_list *lst, void (*del)(void *));
- 첫 번째 인자값으로 받은 요소의 content를 두 번째 인자로 받은 함수 포인터를 이용해 해제하는 함수이다.
- del함수를 통해 lst의 content를 free한다.
ft_lstclear
void ft_lstclear(t_list **lst, void (*del)(void *));
- 인자값으로 받은 요소와 그 뒤에 따라오는 리스트의 모든 요소들을 삭제하고 해제하는 함수이다.
- 삭제하기 전 t_list 변수에 다음 노드의 주소값을 넣고 이후 lst에 대입해 다음 노드의 주소를 가르키게 했다.
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()를 이용해서 새로운 리스트의 content와 리스트 모두 free해준다.
- 새로 생성된 연결 리스트를 반환한다.
728x90
반응형
'42 SEOUL > 0_Libft' 카테고리의 다른 글
[42Seolu/Libft] Tester (0) | 2022.04.17 |
---|---|
[Libft] Part1 : calloc, strdup (0) | 2022.04.11 |
[Libft] Part2 : Additional functions (0) | 2022.03.28 |
[Libft] Part1 : strlen, strnstr, strlcpy, strlcat, strchr, strrchr, strncmp (0) | 2022.03.26 |
[Libft] Part1 : toupper, tolower, atoi (0) | 2022.03.26 |
댓글