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