Exemplo n.º 1
0
Boolean List_addFront(List * list, void * data)
{
    ListNode * oldFirstNode, *newNode;
    
    if(list == NULL || data == NULL)
        return false;

    newNode = createNode(data);
    if(newNode == NULL)
        return false;
    
    /* The list is empty */
    if(list->firstNode == NULL && list->lastNode == NULL) 
    {
        return addFirstNode(list, newNode);
    }
    
    oldFirstNode = list->firstNode;
    
    list->firstNode = newNode;
    newNode->nextNode = oldFirstNode;
    
    oldFirstNode->previousNode = newNode;
    newNode->previousNode = NULL;
    
    list->length++;

    return true;
}
Exemplo n.º 2
0
int enqueue(list* listPtr,int priority,void* data){
        node* nodePtr = calloc(sizeof(node),1);
        node *temp=calloc(sizeof(node),1);
        node *temp2=calloc(sizeof(node),1);
        if(listPtr->length == 0){                
            return addFirstNode(nodePtr,listPtr,data,priority);
        };
        createNode(nodePtr,data,priority);
        temp = listPtr->head;
        if(temp->priority > nodePtr->priority)
             return addFirst(nodePtr,listPtr,data,priority,temp); 
        
        while(temp->next!=NULL)
                temp= temp->next;        
        if(temp->priority < nodePtr->priority)
             return addInLast(nodePtr,listPtr,data,priority,temp);
        return addInMiddle(nodePtr,listPtr,data,priority,temp,temp2);
};
Exemplo n.º 3
0
Boolean ListIterator_insertValue(ListIterator * iterator, void * data)
{
    ListNode * nextNode;
    ListNode * previousNode;
    ListNode * newNode;

    if(iterator == NULL || data == NULL)
        return false;


    if(!ListIterator_hasCurrentValue(iterator))
    {
        if(iterator->list->firstNode != NULL || iterator->list->lastNode != NULL)
        {
            return false;
        }

        newNode = createNode(data);
        if(newNode == NULL)
        {
            return false;
        }
            
        if(!addFirstNode(iterator->list, newNode))
        {
            return false;
        }

        iterator->currentNode = iterator->list->firstNode;

        return true;

    }

    if(iterator->currentNode->previousNode == NULL)
    {
        if(!List_addFront(iterator->list, data))
        {
            return false;
        }

        iterator->currentNode = iterator->list->firstNode;
        return true;
    }

    newNode = createNode(data);

    previousNode = iterator->currentNode->previousNode;
    nextNode = iterator->currentNode;

    previousNode->nextNode = newNode;
    newNode->nextNode = nextNode;

    nextNode->previousNode = newNode;
    newNode->previousNode = previousNode;

    iterator->currentNode = newNode;
    iterator->list->length++;

    return true;

}