https://youtu.be/8HVfEul9nqk

https://youtu.be/rbB3xbJN4qE

https://youtu.be/V9mByvOuCac

main.cpp

#include <iostream>

#include "LinkedList.h"

int main()
{
	tLinkedList	list = {};
	InitList(&list);

	PushBack(&list, 100);
	PushBack(&list, 200);
	PushBack(&list, 300);


	ReleaseList(&list);

	return 0;
}

LinkedList.h

#pragma once


typedef struct _tagNode
{
	int		iData;
	struct _tagNode*	pHeadNode;

}tNode;


typedef struct _tagList
{
	tNode*	pHeadNode;
	int		iCount; // 카운터
}tLinkedList;

//연결형 리스트 초기화
void InitList(tLinkedList* _pList);


//연결형 리스트 테이터 추가
void PushBack(tLinkedList* _pList, int _iData);


//연결형 리스트 메모리 해제
void ReleaseList(tLinkedList* _pList);

LinkedList.cpp

#include <iostream>
#include "LinkedList.h"

void InitList(tLinkedList* _pList)
{
	_pList->pHeadNode = nullptr;
	_pList->iCount = 0;
}

void PushBack(tLinkedList* _pList, int _iData)
{
	//데이터를 저장할 노드 생성
	//데이터 복사
	tNode* pNode = (tNode*)malloc(sizeof(tNode));
	(*pNode).iData = _iData;
	(*pNode).pHeadNode = nullptr;

	//추가한 데이터가 처음인지 아닌지
	if (0 == _pList->iCount)
	{
		_pList->pHeadNode = pNode;
	}

	else
	{
		//현재 가장 마지막 노드를 찾아서
		//해당 노드의 pNext를 생성시킨 노드의 주소로 채움
		tNode* pCurFinalNode = _pList->pHeadNode;
		while (pCurFinalNode->pHeadNode)
		{
			pCurFinalNode = pCurFinalNode->pHeadNode;
		}
		pCurFinalNode->pHeadNode = pNode;
	}

	++_pList->iCount;
}

void Release(tNode* _pNode)
{
	if (nullptr == _pNode)
		return;

	Release(_pNode->pHeadNode);
	free(_pNode);
}

// 힙 영역 할당 제거
void ReleaseList(tLinkedList* _pList)
{
	//Release(_pList->pHeadNode);

	tNode* pDeletNode = _pList->pHeadNode;

	while (pDeletNode)
	{
		tNode* pNext = pDeletNode->pHeadNode;
		free(pDeletNode);
		pDeletNode = pNext;
	}
}

'C,C++' 카테고리의 다른 글

C,C++ 템플릿  (0) 2023.07.17
C,C++ 기초 CLASS / STRUCT  (0) 2023.07.16
C,C++기초 함수 포인터  (0) 2023.07.15
C 기초 가변 배열  (0) 2023.07.14
C언어의 기초 문법  (0) 2023.07.12

+ Recent posts