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