int main(int argc, char* argv[]) { LinkedListHandle* list = LinkedListNew(); int values[5] = {0,1,2,3,4}; int i = 0; for (i = 0; i < 5; i++) { LinkedListAppend(&values[i], list); } i=0; LinkedListNode* node = LinkedListFirst(list); do { DBG_ASSERT( *((int*)LinkedListValueFromNode(node)) == values[i] ); i++; } while( (node = LinkedListNextNode(node)) ); DBG_ASSERT( i == 5); DBG_ASSERT( !LinkedListHasNextNode( LinkedListLast(list) ) ); DBG_ASSERT( LinkedListNodeAt(0, list) == LinkedListFirst(list) ); DBG_ASSERT( LinkedListNodeAt(4, list) == LinkedListLast(list) ); DBG_ASSERT( (*(int*)LinkedListValueFromNode(LinkedListNodeAt(2, list))) == values[2] ); return 0; }
/* LinkedListInsert: return new value after inserting. */ foint LinkedListInsert(LINKED_LIST *ll, foint newEntry) { LINKED_LIST_NODE *prev = NULL, *curr = ll->first; trapAssert(ll->Cmp != NULL); /* if we're first... */ if(ll->first == NULL || ll->Cmp(newEntry, ll->first->data) < 0) return LinkedListPrepend(ll, newEntry); /* we should be last */ if(ll->Cmp(newEntry, ll->last->data) >= 0) return LinkedListAppend(ll, newEntry); /* else ... */ while(curr != NULL && ll->Cmp(newEntry, curr->data) >= 0) { prev = curr; curr = curr->next; } trapAssert(curr != NULL); /* if we're last, it should've been done above! */ prev->next = (LINKED_LIST_NODE*)paj_alloc(sizeof(LINKED_LIST_NODE)); prev->next->data = newEntry; prev->next->next = curr; ll->n++; return newEntry; }
/* * paj - Inserts a void type object if void doesn't appear in the list */ int LinkedListAppendVoidIfNotExist(LINKED_LIST *ll, foint to_add) { LINKED_LIST_NODE *ll_traverse; int found = FALSE; /* go through the list from (lf) and put each item in list to (lt) */ for (ll_traverse = ll->first; ll_traverse != NULL; ll_traverse = ll_traverse->next) { found = FALSE; if (ll_traverse->data == to_add) { found = TRUE; break; } } /* if you don't find, add this data to the front so we don't * compare */ if (found != TRUE) { LinkedListAppend(ll, to_add); } return found; }
/* ** Copies one link list to the other */ void LinkedListCopy(LINKED_LIST *lt, LINKED_LIST *lf) { LINKED_LIST_NODE *curr; /* go through the list from (lf) and put each item in list to (lt) */ for (curr = lf->first; curr != NULL; curr = curr->next) { LinkedListAppend(lt, curr->data); } }
int main(int argc, char* argv[] ) { int value = 0; LinkedListHandle* list = LinkedListNew(); DBG_ASSERT(list != C_NULL); DBG_ASSERT( LinkedListSize(list) == 0 ); LinkedListAppend(&value, list); DBG_ASSERT( LinkedListSize(list) == 1 ); LinkedListPrepend(&value, list); DBG_ASSERT( LinkedListSize(list) == 2 ); LinkedListPrepend(&value, list); DBG_ASSERT( LinkedListSize(list) == 3 ); LinkedListAppend(&value, list); DBG_ASSERT( LinkedListSize(list) == 4 ); LinkedListAppend(&value, list); DBG_ASSERT( LinkedListSize(list) == 5 ); LinkedListPop(list); DBG_ASSERT( LinkedListSize(list) == 4 ); LinkedListPop(list); DBG_ASSERT( LinkedListSize(list) == 3 ); LinkedListShift(list); DBG_ASSERT( LinkedListSize(list) == 2 ); LinkedListShift(list); DBG_ASSERT( LinkedListSize(list) == 1 ); LinkedListDelete(list); return 0; }