728x90
// LinkedList.h (인라인 클래스)
#pragma once
#include <iostream>
#include <assert.h>
template <typename T>
class CListNode
{
template <typename T>
friend class CLinkedList_Rework;
private :
CListNode () {}
~CListNode () {}
typedef CListNode<T> NODE;
private :
T mData;
NODE* mPrev = nullptr;
NODE* mNext = nullptr;
};
template <typename T>
class CLinkedList_Rework
{
private :
template <typename T>
friend class CListNode;
typedef CListNode<T> NODE;
int mSize = 0;
NODE* mBegin;
NODE* mEnd;
public :
CLinkedList_Rework ()
{
mBegin = new NODE;
mEnd = new NODE;
mSize = 0;
mBegin->mNext = mEnd;
mEnd->mPrev = mBegin;
}
~CLinkedList_Rework ()
{
if ( !empty() )
clear ();
delete mBegin;
delete mEnd;
}
void push_back ( const T& data )
{
NODE* node = new NODE;
node->mData = data;
NODE* last = mEnd->mPrev;
last->mNext = node;
node->mPrev = last;
mEnd->mPrev = node;
node->mNext = mEnd;
mSize++;
}
void push_front ( const T& data )
{
NODE* node = new NODE;
node->mData = data;
NODE* front = mBegin->mNext;
node->mNext = front;
front->mPrev = node;
node->mPrev = mBegin;
mBegin->mNext = node;
mSize++;
}
void pop_back ()
{
if (empty ())
{
AllPrint ();
return;
}
NODE* deleteNode = mEnd->mPrev;
NODE* last = deleteNode->mPrev;
last->mNext = mEnd;
mEnd->mPrev = last;
delete deleteNode;
--mSize;
}
void pop_front ()
{
if (empty ())
{
AllPrint ();
return;
}
NODE* deleteNode = mBegin->mNext;
NODE* front = deleteNode->mNext;
front->mPrev = mBegin;
mBegin->mNext = front;
delete deleteNode;
--mSize;
}
int size () const { return mSize; }
bool empty () const { return mSize == 0; }
void clear ()
{
if (empty ())
{
AllPrint ();
return;
}
while (mBegin->mNext != mEnd)
{
NODE* node = mBegin->mNext;
mBegin->mNext = node->mNext;
delete node;
}
mEnd->mPrev = mBegin;
mSize = 0;
}
// 내용 단순 출력용 함수
void AllPrint ()
{
if (empty ())
{
std::cout << "list is empty! " << std::endl;
return;
}
std::cout << "---------------------" << std::endl;
NODE* node = mBegin->mNext;
while (node != mEnd)
{
std::cout << node->mData << std::endl;
node = node->mNext;
}
std::cout << "---------------------" << std::endl;
}
};
// main.cpp
#include "LinkedList_Rework.h"
int main ()
{
CLinkedList_Rework<int> iList;
for (int i = 0 ; i < 4; i++)
{
iList.push_back ( i );
}
iList.AllPrint ();
std::cout << std::endl;
iList.pop_front ();
iList.pop_back ();
iList.AllPrint ();
iList.clear ();
iList.push_front (99);
iList.push_front (88);
std::cout << std::endl;
iList.AllPrint ();
return 0;
}
728x90
'개발개발 > 자료구조' 카테고리의 다른 글
이진 탐색 트리(Binary Search Tree) - c++ (0) | 2025.01.06 |
---|---|
트리(Tree) - c++ (0) | 2025.01.04 |
큐 (Queue) - c++ : 큐 리스트, 서클큐(CircleQueue) 구현 (0) | 2025.01.03 |
스택(Stack) - c++ : 스택 리스트, 스택 동적 배열, 스택 정적 배열 구현 (0) | 2025.01.02 |
댓글