linkedlist.h

Go to the documentation of this file.
00001 #ifndef __LINKEDLIST_H_
00002 #define __LINKEDLIST_H_
00003 
00004 #include <malloc.h>
00005 #include <stdlib.h>
00006 
00007 
00008 template <class T> class LinkedMember
00009 {
00010   public:
00011   LinkedMember()
00012   {
00013           next = NULL; 
00014   }
00015   ~LinkedMember(){}
00016   
00017   T data;
00018   LinkedMember* next;
00019 };
00020 
00021 template <class T> class LinkedList
00022 {
00023 private:
00024         LinkedMember<T> *data;
00025         int m_nSize;
00026         
00027 public:
00028         LinkedList()
00029         {  
00030                 data = NULL;
00031                 m_nSize = 0;
00032         }
00033 
00034         ~LinkedList()
00035         {
00036                 if(data != NULL)
00037                 {
00038                         FreeStack();
00039                 } 
00040         }       
00041         
00042         int GetSize()
00043         {
00044                 return m_nSize;
00045         }
00046         
00047         void FreeStack()
00048         {
00049                 LinkedMember<T> *_data = data;
00050                 
00051                 for(;_data;)
00052                 {
00053                         LinkedMember<T> *pNext;
00054                         pNext = _data->next;
00055                         free(_data);
00056                         _data = pNext;
00057                 }
00058                 data = NULL;
00059         }
00060 
00061         void Grow(unsigned int nAmount)
00062         {
00063                 for(unsigned int i = 0; i < nAmount; i++)
00064                 {
00065                         LinkedMember<T> *stackmember;            
00066                         stackmember = (LinkedMember<T>*)malloc( sizeof(LinkedMember<T>) );      
00067                         if( stackmember != NULL )
00068                         {
00069                                 stackmember->next = data;
00070                                 data = stackmember;
00071                                 m_nSize++;
00072                         }
00073                 }
00074         }
00075 
00076         T& operator [] (unsigned int i)
00077         { 
00078                 LinkedMember<T> *pNext;
00079                 pNext = data;
00080 
00081                 if(NULL != data)
00082                 for(int j = 0; j < m_nSize; j++)
00083                 {
00084                         if(j == i)
00085                         return pNext->data;
00086 
00087                         pNext = pNext->next;
00088                 }
00089 
00090                 return data->data;//0x00;
00091         }
00092         
00093         void Append(T value)
00094         {
00095                 LinkedMember<T> *stackmember;            
00096                 stackmember = (LinkedMember<T>*)malloc( sizeof(LinkedMember<T>) );      
00097                 if( stackmember != NULL )
00098                 {
00099                         stackmember->data = value;
00100                         stackmember->next = data;
00101                         data = stackmember;
00102                         m_nSize++;
00103                 }
00104         }
00105 
00106         void Remove(unsigned int i)
00107         {
00108                 LinkedMember<T> *pPrev = NULL;
00109                 LinkedMember<T> *pThis;
00110                 pThis = data;
00111 
00112                 if(NULL != data)
00113                 for(unsigned int j = 0; j < m_nSize; j++)
00114                 {
00115                         if(j == i)
00116                         {
00117                                 if(NULL == pPrev)
00118                                 {
00119                                         data = pThis->next;
00120                                 }
00121                                 else
00122                                 {
00123                                         pPrev->next = pThis->next;
00124                                 }
00125 
00126                                 if(pThis)
00127                                 {
00128                                         free(pThis);
00129                                         m_nSize--;
00130                                 }                               
00131 
00132                                 return;
00133                         }
00134                         
00135                         pPrev = pThis;
00136                         pThis = pThis->next;
00137                 }               
00138         }
00139         
00140 };
00141 
00142 #endif

Generated on Sat Jan 11 23:36:56 2003 for Build-Lib by doxygen1.2.18