Synopsis
1
2
3
4
5
typedef struct s_list
{
void *content;
struct s_list *next;
} t_list;
- content: 노드에 들어있는 데이터(void형이라 다 가능함)
- next: 다음 노드의 주소 or NULL(마지막 노드면)
- 멤버 연산자 개념 (
.
대신->
통해 멤버 참조)
Functions
ft_lstnew
첫 노드를 생성하는 함수
1
2
node->content = content; //구조체 포인터로 멤버에 접근
node->next = NULL;
- 구현방법
- malloc&널체크
- content에 인수 content 저장
- next에 NULL 저장
ft_lstadd_front
void ft_lstadd_front(t_list **lst, t_list *new)
앞쪽에 새로운 노드를 추가하는 함수
- 매개변수
t_list **lst
: 삽입될 리스트*lst
: 첫 번째 연결 리스트의 포인터 주소t_list *new
: 리스트에 더해질 노드new
: 새로운 노드의 포인터 주소
- 구현방법
- 널체크
new→next = *lst
: new 노드가 가리키는 값을 리스트의 첫 노드로 설정*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: 새로 추가할 노드의 포인터 주소
- 구현방법
- 노드(*lst)가 NULL이면 new노드로 바꿔주고 끝냄
ft_lstlast(*lst))->next = new
: 기존의 마지막 노드가 가리키는 값을 새로운 노드의 시작주소가 되도록 설정
ft_lstdelone
특정 노드를 삭제하는 함수
void ft_lstdelone(t_list *lst, void (*del)(void *))
- 매개변수
- lst
void (*del)(void *)
: void *형을 매개변수로 가진 삭제 함수 포인터
- 구현과정
- 노드의 content를 삭제(del)
- 해당 노드를 free
ft_lstclear
모든 노드를 삭제하는 함수
- 구현방법
- tmp에 첫 노드의 next 멤버를 저장
ft_lstdelone
활용해서 현재 노드를 삭제&free- 첫 노드를 tmp로(2번째 노드가 첫노드로 변경됨)
-
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(할당 실패 시)
- 구현방법
- 널가드
- tmp에 f함수포인터를 적용한 노드를 저장
- tmp에 노드 만드는데 오류생기면 0리턴
- result뒤에 노드 붙이기
- tmp, lst 다음으로 넘기기
- 끝까지 돌면 result 리턴