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 != 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     if (parsenode == NULL) {
00153       return NULL;
00154     }
00155 
00156     
00157     return parsenode->node_data;
00158 }
00159 
00160 
00161 
00162 
00163 
00164 
00165 int ListAdd(list_p list, DATA data)
00166 {
00167     
00168     listNode_t *parsenode;
00169     listNode_t *new_listnode;
00170     parsenode = (listNode_t *) list->listhead;
00171 
00172     
00173     new_listnode = (listNode_t *)malloc(sizeof(listNode_t));
00174     new_listnode->node_data = data;
00175 
00176     
00177     if(list->listhead == NULL)
00178     {
00179         list->listhead = new_listnode;
00180         list->listhead->next = NULL;
00181         list->size = 1;
00182 
00183         return 0;
00184     }
00185 
00186     
00187     for(
00188             parsenode = (listNode_t *) list->listhead; 
00189             parsenode->next != NULL; 
00190             parsenode = (listNode_t *) parsenode->next
00191        );
00192 
00193     
00194     parsenode->next = (listNode_t *)new_listnode;
00195     new_listnode->next = NULL;
00196     list->size++;
00197 
00198     
00199     return 0;
00200 }
00201 
00202 
00203 
00204 
00205 
00206 
00207 int ListInsert(list_p list, DATA data, const int index)
00208 {
00209     
00210 
00211 
00212     return 0;
00213 }
00214 
00215 
00216 
00217 
00218 
00219 
00220 DATA ListDelete(list_p list, const int index)
00221 {
00222     
00223     listNode_t *parsenode;
00224     int i;
00225     listNode_t *previous_parsenode;
00226     DATA return_data;
00227     parsenode = list->listhead;
00228     previous_parsenode = NULL;
00229 
00230     
00231     if(index >= list->size || index < 0)
00232         return NULL;
00233 
00234     if(index == 0) 
00235     {
00236         
00237         parsenode = list->listhead;
00238         list->listhead = list->listhead->next;
00239         list->size--;
00240         return_data = parsenode->node_data;
00241     } else {
00242 
00243         for(i = 1; i < list->size && parsenode != NULL; i++)
00244         {
00245             previous_parsenode = parsenode;
00246             parsenode = (listNode_t *) parsenode->next;
00247             if(i == index)
00248                 break;
00249         }
00250 
00251           
00252         previous_parsenode->next = parsenode->next;
00253 
00254         
00255         return_data = parsenode->node_data;
00256 
00257         list->size--;
00258     }
00259     
00260     free(parsenode); 
00261 
00262     
00263     return return_data;
00264 
00265 }
00266