Unborn 8.0 Yellow Pointer
본문 바로가기
42 SEOUL/0_Libft

[Libft] Bonus part

by 에삐니 2022. 3. 28.
728x90

[이전 글]

 

[Libft] 나만의 첫 번째 라이브러리

1. 프로젝트 소개 C 프로그래밍을 할 때 매우 유용한 표준 함수들을 사용할 수 없다면 굉장히 지루할 거예요. 이 프로젝트를 통해 이러한 표준 함수들을 구현하고, 이해하고, 어떻게 사용하는지

bini-079.tistory.com

 

[Libft] Part1 : isalpha, isdigit, isalnum, isascii, isprint

[이전 글] [Libft] 나만의 첫 번째 라이브러리 1. 프로젝트 소개 C 프로그래밍을 할 때 매우 유용한 표준 함수들을 사용할 수 없다면 굉장히 지루할 거예요. 이 프로젝트를 통해 이러한 표준 함수들

bini-079.tistory.com

 

[Libft] Part2 : Additional functions

[이전 글] [Libft] 나만의 첫 번째 라이브러리 1. 프로젝트 소개 C 프로그래밍을 할 때 매우 유용한 표준 함수들을 사용할 수 없다면 굉장히 지루할 거예요. 이 프로젝트를 통해 이러한 표준 함수들

bini-079.tistory.com


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
반응형

댓글