Desc :
도저히 말로는 설명을 못하겠다,,,
Source Code :
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int add_list(char* name, char* tel, char* addr);
void print_list(void);
void remove_list(void);
typedef struct tagLikedList
{
char name[30];
char tel[30];
char addr[100];
struct tagLikedList *next; // 다음 자료가 위치한 번지를 저장하기 위해 사용
}ADDR;
ADDR *g_pAddrHead = NULL; // 링크드 리스트의 첫번째 노드
void main()
{
add_list("홍길동", "1111", "서울특별시 종로구");
add_list("홍길동", "2222", "서울특별시 강서구");
add_list("Mr.Kim", "3333", "서울특별시 구로구");
add_list("김C", "4444", "서울특별시 강동구");
add_list("최C", "5555", "대전광역시 동구");
print_list();
remove_list();
}
int add_list(char* name, char* tel, char* addr)
{
ADDR *plocal; // 현재 데이터를 저장하기 위함
ADDR *pn = g_pAddrHead; // 현재 노드의 주소를 이전 노드의 next에 저장하기 위함
if (g_pAddrHead == NULL) // 한번만 실행됨
{
g_pAddrHead = malloc(sizeof(ADDR)); // 머리노드 구조체 할당 --> 할당된 주소가 저장됨
if (g_pAddrHead == NULL)// 할당 실패
{
return 0;
}
g_pAddrHead->next = NULL; // 일단 null로 저장, 안그러면 쓰레기값
plocal = g_pAddrHead; // 할당된 주소 대입
}
else
{
plocal = malloc(sizeof(ADDR)); // ADDR 구조체 할당 --> 할당된 주소 저장
if (plocal == NULL) // 메모리 할당 불가
{
return 0;
}
while (pn->next) // 다음 데이터 존재하면
{
pn = pn->next; // 그 다음 노드 주소를, 마지막 노드 찾기
} // null이면 마지막노드
pn->next = plocal; // 현재 데이터가 저장되는 노드의 주소를 이전 노드의 next에 저장
plocal->next = NULL; // 일단 null값 저장
}
strcpy(plocal->name, name);
strcpy(plocal->tel, tel);
strcpy(plocal->addr, addr);
return 1;
}
void print_list(void)
{
int count = 1;
ADDR *plist;
plist = g_pAddrHead;
while (plist) // 머리 노드부터 ~ 마지막 노드까지
{
printf("No. %d\n", count++);
puts(plist->name);
puts(plist->tel);
printf("%s \n\n", plist->addr);
plist = plist->next;
}
}
void remove_list(void)
{
ADDR *plocal;
while (g_pAddrHead)
{
plocal = g_pAddrHead->next; // 다음 노드의 주소
free(g_pAddrHead); // 현재 노드 메모리 반환
g_pAddrHead = plocal; // 다음 노드를 현재노드로 옮기기
}
}
Result :
'C' 카테고리의 다른 글
[C] 268 주소록 (아직 작성 안함) (0) | 2021.02.18 |
---|---|
[C] 267 이중 링크드 리스트 구현하기 (1) | 2021.02.17 |
[C] 265 큐 구현 (0) | 2021.02.17 |
[C] 264 스택구현 (0) | 2021.02.17 |
[C] 263 야구게임 (1) | 2021.02.17 |