https://youtu.be/zwbH4ScKctA

main.cpp

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


int main()
{
	CList<int> list;

	for(int i = 0; i < 100 ; ++i)
		{
			list.push_back(i);
		}

	return 0;
}

CList.h

#pragma once
template<typename T>
struct tListNode
{
	T				data;
	tListNode<T>*	pPrev;
	tListNode<T>*	pNext;

	tListNode()
		: data()
		, pPrev(nullptr)
		, pNext(nullptr)
	{
	}
	
	//기본 초기 값
	tListNode(const T& _data, tListNode<T>* _pPrev, tListNode<T>* _pNext)
		: data(_data)
		, pPrev(_pPrev)
		, pNext(_pNext)
	{

	}
};

template<typename T>
class CList
{
private:
	tListNode<T>*	m_pHead; //헤드
	tListNode<T>*	m_pTail; //총
	int				m_iCount; // 카운터
public:
	void push_back(const T& _data);
	void push_front(const T& _data);
public:
	CList();
	~CList();
};

template<typename T>
void CList<T>::push_back(const T& _data)
{
	//입력된 데이터를 저장할 노드를 동적할당 함
	tListNode<T>* pNewNode = new tListNode<T>(_data, nullptr, nullptr);

	//처음 입력된 테이터라면
	if (nullptr == m_pHead)
	{
		//처음 입력되 테이터라면
		m_pHead = pNewNode;
		m_pTail = pNewNode;
	}
	else
	{
		//데이타가 1개 이상에서 입력된 경우
		//현재 가장 마자막 테이터(tail)를 저장하고 있는 노드와
		//새로 생성된 노드가 서로 가리키게 한다.
		m_pTail->pNext = pNewNode;
		pNewNode->pPrev = m_pTail;


		//List 가 마지막 노드의 주소값을 새로 입력된 노드로 생신한다.
		m_pTail = pNewNode;
	}
	// 데이터 개수 증가
	++m_iCount;
}

template<typename T>
void CList<T>::push_front(const T& _data)
{
	//새로 생성된 노드의 다음을 현재 헤드노드의 주소값으로 채움
	tListNode<T>* pNewNode = new tListNode<T>(_data, nullptr, m_pHead);

	//현재 헤드노드의 이전노드 주소값을 새로 생성된 노드의 주소로 채움
	m_pHead->pPrev = pNewNode;

	//리스트가 새로 생성된 노드의 주소를 새로운 헤드주소로 갱신한다.
	m_pHead = pNewNode;

	//데이터 개수 증가
	++m_iCount;
}


template<typename T>
CList<T>::CList()
	: m_pHead(nullptr)
	, m_pTail(nullptr)
	, m_iCount(0)
{
}

template<typename T>
 CList<T>::~CList()
{
	 tListNode<T>* pDeletNode = m_pHead;

	 while (pDeletNode)
	 {
		 tListNode<T>* pNext = pDeletNode->pNext;
		 delete(pDeletNode);
		 pDeletNode = pNext;
	 }
}

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

C,C++: 글래스 구초체  (0) 2023.07.26
C,C++ : using, namespace(std::cout,std::endl)  (0) 2023.07.19
C,C++ 템플릿  (0) 2023.07.19
C,C++ 클래스 템플릿  (0) 2023.07.17
C,C++ 포인터와 레퍼런스의 차이점  (0) 2023.07.17

+ Recent posts