자료구조 4차과제를 하기위해서 , 급히 제작하던 링크드리스트 클래스모듈을 완성했다!!
클래스템플릿을 사용하여 , 특정 플랫폼에 구애받지않고 , 어떠한 자료형이던지 링크드리스트로 만들어 줄 수 있다는거 ㅋㅋ
당연히 , C++로 만들었다. STL에 근접할정도의 기능을 넣고 싶었는데,, 음,, 글쎄다 ㅋㅋ
다음 버젼은 Insertion Sort를 사용해서 정렬도 시켜주고 , 내부알고리즘도 개선할 예정!
우아앙 ㅋㅋ 좋구나!
아차,, 그러고보니 주석을 안달았다.. -_-;;
이노메 주석안다는 습관 .. -_-;
1 . linkedclass.h
#ifndef _linkedclass_h
#define _linkedclass_h
#include <iostream>
#define SORT_INDEX_VALUEABLE // Not yet!!
using namespace std;
template <typename T>
class CNode
{
public:
T m_node;
CNode *next;
};
template <typename T>
class CLinkedList
{
public:
CLinkedList ();
virtual ~CLinkedList ();
public:
void AddNode ( T node );
void DeleteNode ( T *pNode );
T *GetNodePointer ( void );
T *SearchNode ( T node );
void SeekNext ( void );
void SeekLast ( void );
void SeekFirst ( void );
bool IsFirstNode ( void );
bool IsLastNode ( void );
private:
CNode<T> *m_pHead;
CNode<T> *m_pFind;
};
#endif
2 . linkedclass.cpp
#include "linkedclass.h"
template <typename T>
CLinkedList<T>::CLinkedList ()
{
m_pHead = new CNode<T>;
m_pHead->next = NULL;
m_pFind = m_pHead->next;
}
template <typename T>
CLinkedList<T>::~CLinkedList()
{
CNode<T> *pCurrent;
CNode<T> *pTempNext;
pCurrent = m_pHead;
while ( pCurrent != NULL )
{
pTempNext = pCurrent->next;
delete pCurrent;
pCurrent = pTempNext;
}
}
template <typename T>
void CLinkedList<T>::SeekNext ( void )
{
if ( IsLastNode () == true )
{
return;
}
m_pFind = m_pFind->next;
}
template <typename T>
void CLinkedList<T>::SeekFirst ( void )
{
m_pFind = m_pHead->next;
}
template <typename T>
void CLinkedList<T>::SeekLast ( void )
{
CNode<T> *pFind;
pFind = m_pHead;
while ( pFind->next != NULL )
{
pFind = pFind->next;
}
m_pFind = pFind;
}
template <typename T>
bool CLinkedList<T>::IsLastNode ( void )
{
CNode<T> *pFind;
pFind = m_pHead;
while ( pFind->next != NULL )
{
pFind = pFind->next;
}
if ( m_pFind == pFind->next )
{
return true;
}
return false;
}
template <typename T>
bool CLinkedList<T>::IsFirstNode ( void )
{
if ( m_pFind == m_pHead->next )
{
return true;
}
return false;
}
template <typename T>
void CLinkedList<T>::AddNode ( T node )
{
CNode<T> *pFind;
CNode<T> *pNew;
pFind = m_pHead;
pNew = new CNode<T>;
pNew->m_node = node;
while ( pFind->next != NULL )
{
pFind = pFind->next;
}
pFind->next = pNew;
pNew->next = NULL;
}
template <typename T>
void CLinkedList<T>::DeleteNode ( T *pNode )
{
CNode<T> *pCurrent;
CNode<T> *pPrev;
pPrev = m_pHead;
pCurrent = m_pHead->next;
while ( pCurrent != NULL )
{
if ( &pCurrent->m_node == pNode )
{
pPrev->next = pCurrent->next;
delete pCurrent;
return;
}
pPrev = pPrev->next;
pCurrent = pCurrent->next;
}
}
template <typename T>
T *CLinkedList<T>::GetNodePointer ( void )
{
T *pRes;
if ( m_pFind == NULL )
{
return NULL;
}
pRes = &m_pFind->m_node;
return pRes;
}
template <typename T>
T *CLinkedList<T>::SearchNode ( T node )
{
CNode<T> *pFind;
pFind = m_pHead;
while ( pFind->next != NULL )
{
if ( node == pFind->m_node )
{
return &pFind->m_node;
}
pFind = pFind->next;
}
return NULL;
}
링크드클래스, 1 Posts.
2008/05/28

