/***************************************************************************** * File: linklist.c * Programmer: Dorian Winterfeld * Anne Raugh * Institution: PDS/Small Bodies Node * University of Maryland * Abstract: implementation of a linked list *****************************************************************************/ #include #include #include "linklist.h" #include "pdserror.h" list_type *list_create(){ list_type *l; l = (list_type *)malloc(sizeof(list_type)); if (l == NULL) return NULL; else { l->rear = NULL; l->head = NULL; } return l; } /* end list_create */ void list_destroy(list_type *l){ /* loop thru list, freeing all nodes */ list_node *curr; list_node *tmp; curr = l->rear; while (curr != NULL) { tmp = curr->prev; /* loop thru list, freeing nodes */ free(curr->data); free(curr); curr = tmp; } } int list_empty(list_type *l){ /* is list empty ? */ if (l->rear == NULL) return 1; else return 0; } /* int remove(list_type *l, list_node *node){ list_node *tmp1; list_node *tmp2; if ( l == NULL || l->rear == NULL || l->rear->data == NULL ) return ERROR; if (node->next == NULL) l->rear = node->prev; tmp1 = node->prev; tmp2 = node->next; if (tmp1 != NULL) tmp1->next = tmp2; if (tmp2 != NULL) tmp2->prev = tmp1; free(node); return 1; } */ int insert(list_type *l, char *item){ /* inserts at rear of list */ list_node *tmp; int len; tmp = l->rear; if (l->rear == NULL){ /* new list */ l->rear = (list_node *) malloc(sizeof(list_node)); if (l->rear == NULL) return MALLOC_ERROR; l->head = l->rear; } else { /* add node to rear of list */ l->rear->next = (list_node *) malloc(sizeof(list_node)); if (l->rear->next == NULL) return MALLOC_ERROR; l->rear = l->rear->next; /* update rear pntr */ } l->rear->next = NULL; l->rear->prev = tmp; len = strlen(item); l->rear->data = (char *) malloc(len+1); if (l->rear->data == NULL) return MALLOC_ERROR; else strcpy(l->rear->data,item); return 1; }