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;
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