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

+ Recent posts