Пример #1
0
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);
	}
}
Пример #5
0
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;
}