Home Libft ⑤ Bonus part
Post
Cancel

Libft ⑤ Bonus part

Synopsis

1
2
3
4
5
typedef struct s_list
{
	void			*content;
	struct s_list	*next;
}					t_list;
  • content: 노드에 들어있는 데이터(void형이라 다 가능함)
  • next: 다음 노드의 주소 or NULL(마지막 노드면)

linked list

  • 멤버 연산자 개념 (. 대신 -> 통해 멤버 참조)

Functions

ft_lstnew

첫 노드를 생성하는 함수

1
2
node->content = content; //구조체 포인터로 멤버에 접근
node->next = NULL;
  • 구현방법
    1. malloc&널체크
    2. content에 인수 content 저장
    3. next에 NULL 저장

ft_lstadd_front

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

앞쪽에 새로운 노드를 추가하는 함수

  • 매개변수
    • t_list **lst : 삽입될 리스트
    • *lst : 첫 번째 연결 리스트의 포인터 주소
    • t_list *new : 리스트에 더해질 노드
    • new : 새로운 노드의 포인터 주소
  • 구현방법
    1. 널체크
    2. new→next = *lst : new 노드가 가리키는 값을 리스트의 첫 노드로 설정
    3. *lst = new : lst의 첫노드를 new로 변경

ft_lstsize

리스트의 길이 세는 함수

  • 반환값: 리스트의 노드 개수
  • 매개변수: lst: 리스트의 시작주소
  • 구현방법
    lst = lst->next : 포인터에 다음 노드의 주소 저장

ft_lstlast

마지막 노드를 반환하는 함수

  • 구현방법
    • 노드가 널값을 가리킬 때까지 이동한 후 리턴
    • lst->next 가 NULL? == 노드가 널값을 가리킴

ft_lstadd_back

리스트 끝에 new 노드를 추가하는 함수

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

  • 매개변수
    • lst: 첫 번째 연결리스트의 포인터 주소
    • new: 새로 추가할 노드의 포인터 주소
  • 구현방법
    1. 노드(*lst)가 NULL이면 new노드로 바꿔주고 끝냄
    2. ft_lstlast(*lst))->next = new : 기존의 마지막 노드가 가리키는 값을 새로운 노드의 시작주소가 되도록 설정

ft_lstdelone

특정 노드를 삭제하는 함수

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

  • 매개변수
    • lst
    • void (*del)(void *) : void *형을 매개변수로 가진 삭제 함수 포인터
  • 구현과정
    1. 노드의 content를 삭제(del)
    2. 해당 노드를 free

ft_lstclear

모든 노드를 삭제하는 함수

  • 구현방법
    1. tmp에 첫 노드의 next 멤버를 저장
    2. ft_lstdelone 활용해서 현재 노드를 삭제&free
    3. 첫 노드를 tmp로(2번째 노드가 첫노드로 변경됨)
    4.  lst의 메모리가 해제되었다는 것을 명시적으로 알려주기 위해 *lst에 NULL을 할당
  • 참고
    • lst == NULL: 연결리스트 자체가 없음
    • *lst == NULL 연결리스트에 노드가 없이 비어있음

ft_lstiter

노드의 모든 요소에 함수를 적용시키는 함수

  • 매개변수
    • lst: 리스트의 포인터 주소
    • f: 리스트에 적용할 함수포인터
  • 구현방법
    • while문으로 끝까지 돌리기
    • f(lst→contenxt) : 노드에 f함수를 적용함
    • lst = lst->next : 현재 노드가 가리키는 노드로 lst를 바꿔줌

ft_lstmap

연결리스트의 노드요소들에 함수를 적용해서 새 리스트와 노드에 복사하는 함수

  • 매개변수
    • lst: 리스트의 포인터 주소
    • f: 각 리스트에 적용시킬 함수
    • del: content를 삭제하는데 사용되는 함수
  • 반환값
    • 새 리스트
    • NULL(할당 실패 시)
  • 구현방법
    1. 널가드
    2. tmp에 f함수포인터를 적용한 노드를 저장
    3. tmp에 노드 만드는데 오류생기면 0리턴
    4. result뒤에 노드 붙이기
    5. tmp, lst 다음으로 넘기기
    6. 끝까지 돌면 result 리턴
This post is licensed under CC BY 4.0 by the author.

VSCode에서 Norminette 확장 오류

Get Next Line ① Subject