Desc :
Source Code :
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int add_list(char* name);
void print_list(void);
void remove_list(void);
typedef struct tagLinkedList
{
char name[30];
struct tagLinkedList *prev;
struct tagLinkedList *next;
}ADDR;
ADDR *g_pAddrHead = NULL;
void main()
{
add_list("Kim");
add_list("Choi");
print_list();
remove_list();
}
int add_list(char* name)
{
ADDR *plocal;
if (g_pAddrHead == NULL)
{
g_pAddrHead = malloc(sizeof(ADDR));
if (g_pAddrHead == NULL)
{
return 0; // 할당실패
}
g_pAddrHead->prev = NULL;
g_pAddrHead->next = NULL;
}
else
{
plocal = malloc(sizeof(ADDR));
if (plocal == NULL)
{
return 0; // 할당 실패
}
g_pAddrHead->next = plocal;
plocal->prev = g_pAddrHead;
g_pAddrHead = plocal;
g_pAddrHead->next = NULL;
}
strcpy(g_pAddrHead->name, name);
return 1;
}
void print_list(void)
{
int count = 1;
ADDR *plocal;
plocal = g_pAddrHead;
while (plocal->prev) //리스트의 맨 처음으로 이동
{
plocal = plocal->prev;
}
while (plocal)
{
printf("No.%d: ", count++);
puts(plocal->name);
plocal = plocal->next;
}
}
void remove_list(void)
{
ADDR *plocal; // 다음 노드 주소 저장
while (g_pAddrHead->prev) // 리스트 맨 처음으로 이동
{
g_pAddrHead = g_pAddrHead->prev;
}
while (g_pAddrHead) // 마지막 노드까지 메모리 반환
{
plocal = g_pAddrHead->next;
free(g_pAddrHead); // 현재 노드 메모리 반환
g_pAddrHead = plocal;
}
g_pAddrHead = NULL; // 재사용을 위한 초기화
}
조건문에서 == 연산자를 =로 썼다. 바보...
Result :
'C' 카테고리의 다른 글
[C] TCP/IP 초기화하기 (1) | 2021.02.18 |
---|---|
[C] 268 주소록 (아직 작성 안함) (0) | 2021.02.18 |
[C] 266 단일 링크드 리스트 구현 (0) | 2021.02.17 |
[C] 265 큐 구현 (0) | 2021.02.17 |
[C] 264 스택구현 (0) | 2021.02.17 |