00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 #include "list.h"
00025 #include <stdio.h>
00026 #include <stdlib.h>
00027 
00028 
00029 
00030 
00031 
00032 
00033 list_p ListInitialize(void)
00034 {
00035     list_p list;
00036     
00037     list = (list_p)malloc(sizeof(list_t));
00038     list->size = 0;
00039     list->listhead = NULL;
00040 
00041     return list;
00042 }
00043 
00044 
00045 
00046 
00047 
00048 
00049 void ListTerminate(list_p list)
00050 {
00051     
00052     if(list->size > 0)
00053     {
00054         printf("ERROR: MEMORY leak Created \n");
00055         return;
00056     } 
00057 
00058     
00059     if(list->listhead != NULL)
00060         free(list->listhead);
00061 
00062     
00063     free(list);
00064 
00065     return;
00066 }
00067 
00068 
00069 
00070 
00071 
00072 
00073 int list_pGetSize(list_p list)
00074 {
00075     return list->size;
00076 }
00077 
00078 
00079 DATA ListGetHead(list_p list)
00080 {
00081     return list->listhead->node_data;
00082 }
00083 
00084 
00085 
00086 
00087 
00088 
00089 DATA ListPop(list_p list) 
00090 {
00091     listNode_t *parsenode;
00092     DATA data;
00093     parsenode = (listNode_t *)list->listhead;
00094 
00095     if(list->listhead == NULL)
00096         return NULL;
00097 
00098     
00099     if(parsenode != NULL)
00100     {
00101         list->listhead = (listNode_t *)list->listhead->next;
00102         data = parsenode->node_data;
00103         free(parsenode);
00104         if(data == NULL)
00105         {
00106             printf("returning NULL data \n");
00107             exit(EXIT_FAILURE);
00108         }
00109         list->size--;
00110         return data;
00111     }
00112     else
00113     {
00114         printf("There is nothing in the list we are returning NULL \n");
00115         return (DATA)NULL;
00116     }
00117 }
00118 
00119 
00120 
00121 
00122 
00123 
00124 DATA ListSearch(list_p list, const int index)
00125 {
00126     
00127     listNode_t *parsenode;
00128     int i;
00129 
00130     
00131     if(list->listhead == NULL)
00132         return NULL;
00133 
00134     
00135     parsenode = list->listhead;
00136     i = 0;
00137 
00138     
00139     for(
00140             parsenode = (listNode_t *)list->listhead;
00141             parsenode->next != NULL;
00142             parsenode = (listNode_t *)parsenode->next
00143        )
00144     {
00145         if(i == index)
00146             break;
00147         if(i == list->size)
00148             return NULL;
00149         i++;
00150     }
00151 
00152     
00153     return parsenode->node_data;
00154 }
00155 
00156 
00157 
00158 
00159 
00160 
00161 int ListAdd(list_p list, DATA data)
00162 {
00163     
00164     listNode_t *parsenode;
00165     listNode_t *new_listnode;
00166     parsenode = (listNode_t *) list->listhead;
00167 
00168     
00169     new_listnode = (listNode_t *)malloc(sizeof(listNode_t));
00170     new_listnode->node_data = data;
00171 
00172     
00173     if(list->listhead == NULL)
00174     {
00175         list->listhead = new_listnode;
00176         list->listhead->next = NULL;
00177         list->size = 1;
00178 
00179         return 0;
00180     }
00181 
00182     
00183     for(
00184             parsenode = (listNode_t *) list->listhead; 
00185             parsenode->next != NULL; 
00186             parsenode = (listNode_t *) parsenode->next
00187        );
00188 
00189     
00190     parsenode->next = (listNode_t *)new_listnode;
00191     new_listnode->next = NULL;
00192     list->size++;
00193 
00194     
00195     return 0;
00196 }
00197 
00198 
00199 
00200 
00201 
00202 
00203 int ListInsert(list_p list, DATA data, const int index)
00204 {
00205     
00206 
00207 
00208     return 0;
00209 }
00210 
00211 
00212 
00213 
00214 
00215 
00216 DATA ListDelete(list_p list, const int index)
00217 {
00218     
00219     listNode_t *parsenode;
00220     int i;
00221     listNode_t *previous_parsenode;
00222     DATA return_data;
00223     parsenode = list->listhead;
00224     previous_parsenode = NULL;
00225 
00226     
00227     if(index >= list->size || index < 0)
00228         return NULL;
00229 
00230     if(index == 0) 
00231     {
00232         
00233         parsenode = list->listhead;
00234         list->listhead = list->listhead->next;
00235         list->size--;
00236         return_data = parsenode->node_data;
00237     } else {
00238 
00239         for(i = 1; i < list->size && parsenode != NULL; i++)
00240         {
00241             previous_parsenode = parsenode;
00242             parsenode = (listNode_t *) parsenode->next;
00243             if(i == index)
00244                 break;
00245         }
00246 
00247           
00248         previous_parsenode->next = parsenode->next;
00249 
00250         
00251         return_data = parsenode->node_data;
00252 
00253         list->size--;
00254     }
00255     
00256     free(parsenode); 
00257 
00258     
00259     return return_data;
00260 
00261 }
00262