Online Book Reader

Home Category

Mastering Algorithms With C - Kyle Loudon [38]

By Root 1566 0

* *

*****************************************************************************/

new_element->data = (void *)data;

if (dlist_size(list) == 0) {

/**************************************************************************

* *

* Handle insertion when the list is empty. *

* *

**************************************************************************/

list->head = new_element;

list->head->prev = NULL;

list->head->next = NULL;

list->tail = new_element;

}

else {

/**************************************************************************

* *

* Handle insertion when the list is not empty. *

* *

**************************************************************************/

new_element->next = element->next;

new_element->prev = element;

if (element->next == NULL)

list->tail = new_element;

else

element->next->prev = new_element;

element->next = new_element;

}

/*****************************************************************************

* *

* Adjust the size of the list to account for the inserted element. *

* *

*****************************************************************************/

list->size++;

return 0;

}

/*****************************************************************************

* *

* ---------------------------- dlist_ins_prev ---------------------------- *

* *

*****************************************************************************/

int dlist_ins_prev(DList *list, DListElmt *element, const void *data) {

DListElmt *new_element;

/*****************************************************************************

* *

* Do not allow a NULL element unless the list is empty. *

* *

*****************************************************************************/

if (element == NULL && dlist_size(list) != 0)

return -1;

/*****************************************************************************

* *

* Allocate storage to be managed by the abstract datatype. *

* *

*****************************************************************************/

if ((new_element = (DListElmt *)malloc(sizeof(DListElmt))) == NULL)

return -1;

/*****************************************************************************

* *

* Insert the new element into the list. *

* *

*****************************************************************************/

new_element->data = (void *)data;

if (dlist_size(list) == 0) {

/**************************************************************************

* *

* Handle insertion when the list is empty. *

* *

**************************************************************************/

list->head = new_element;

list->head->prev = NULL;

list->head->next = NULL;

list->tail = new_element;

}

else {

/**************************************************************************

* *

* Handle insertion when the list is not empty. *

* *

**************************************************************************/

new_element->next = element;

new_element->prev = element->prev;

if (element->prev == NULL)

list->head = new_element;

else

element->prev->next = new_element;

element->prev = new_element;

}

/*****************************************************************************

* *

* Adjust the size of the list to account for the new element. *

* *

*****************************************************************************/

list->size++;

return 0;

}

/*****************************************************************************

* *

* ----------------------------- dlist_remove ----------------------------- *

* *

*****************************************************************************/

int dlist_remove(DList *list, DListElmt *element, void **data) {

/*****************************************************************************

* *

* Do not allow a NULL element or removal from an empty list. *

* *

*****************************************************************************/

if (element == NULL || dlist_size(list) == 0)

return -1;

/*****************************************************************************

Return Main Page Previous Page Next Page

®Online Book Reader