링크드클래스, 1 Posts.

링크드리스트 클래스 , Ver 1.00

Date
2008/05/28 02:15
Author
ApPLe
Categories
자료구조 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;
}

ApPLe
2008/05/28 02:15 2008/05/28 02:15
Tag
Trackback
Comments
1