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