Example #1
0
int insertionSort(My402List *pList, My402SortElem *pKey){

	My402ListElem *current = My402ListLast(pList);
	My402ListElem *prevCurrent = current;
	while(current != NULL &&
		current->obj != NULL && 
		 ((My402SortElem *)current->obj)->transTime > pKey->transTime){
	
		prevCurrent = current;
		current = My402ListPrev(pList, current);	
	}
	if(current != NULL && current->obj != NULL){
		if(((My402SortElem *)current->obj)->transTime ==  pKey->transTime){
			fprintf(stderr,"\nTime stamp %lld is repeated for some entries",(long long)pKey->transTime);	
			//clean up an return
			unlinkSortElements(pList);	
			return FALSE;
		
		}
	}
	if(current == NULL){
		My402ListInsertBefore(pList, pKey, prevCurrent);
	}else{
		My402ListInsertAfter(pList, pKey, current);
	}
	return TRUE;
}
Example #2
0
static
void BubbleForward(My402List *pList, My402ListElem **pp_elem1, My402ListElem **pp_elem2)
    /* (*pp_elem1) must be closer to First() than (*pp_elem2) */
{
    My402ListElem *elem1=(*pp_elem1), *elem2=(*pp_elem2);
    void *obj1=elem1->obj, *obj2=elem2->obj;
    My402ListElem *elem1prev=My402ListPrev(pList, elem1);
/*  My402ListElem *elem1next=My402ListNext(pList, elem1); */
/*  My402ListElem *elem2prev=My402ListPrev(pList, elem2); */
    My402ListElem *elem2next=My402ListNext(pList, elem2);

    My402ListUnlink(pList, elem1);
    My402ListUnlink(pList, elem2);
    if (elem1prev == NULL) {
        (void)My402ListPrepend(pList, obj2);
        *pp_elem1 = My402ListFirst(pList);
    } else {
        (void)My402ListInsertAfter(pList, obj2, elem1prev);
        *pp_elem1 = My402ListNext(pList, elem1prev);
    }
    if (elem2next == NULL) {
        (void)My402ListAppend(pList, obj1);
        *pp_elem2 = My402ListLast(pList);
    } else {
        (void)My402ListInsertBefore(pList, obj1, elem2next);
        *pp_elem2 = My402ListPrev(pList, elem2next);
    }
}
int main(){
	
	int i=100;
	int j=0;
	My402List list;
	//========== initialization part starts==========	
	memset(&list,0,sizeof(My402List));	
	My402List *pList = NULL;	
	pList = &list;		
	My402ListElem *ptrToAnchor = &(pList->anchor);
	ptrToAnchor->next = ptrToAnchor;
	ptrToAnchor->prev = ptrToAnchor;
	//=========== initialization part ends============	
	My402ListElem *current = ptrToAnchor;
	for(; j<10;j++){
		My402ListInsertAfter(&list,(void *)&i,current);	
		i= i+10;
		current = current->next;
	}
	NL
	printf("Appneded the whole list");
	NL	
		
	for(current=My402ListFirst(pList);
		current != NULL;
		current=My402ListNext(pList,current)	
		){
		
		printf("%d -->", *((int *)current->obj));	
	}	
	NL
}
Example #4
0
void insertionSort(My402List *pList, My402SortElem *pKey){

	My402ListElem *current = My402ListLast(pList);
	My402ListElem *prevCurrent = current;
	while(current != NULL &&
		current->obj != NULL && 
		 ((My402SortElem *)current->obj)->transTime > pKey->transTime){
	
		prevCurrent = current;
		current = My402ListPrev(pList, current);	
	}
	if(current == NULL){
		My402ListInsertBefore(pList, pKey, prevCurrent);
	}else{
		My402ListInsertAfter(pList, pKey, current);
	}
}
// Append the item to the list 
int  My402ListAppend(My402List* myList, void* elem) { 
	My402ListElem *newElement = NULL;
	My402ListElem *anchorElement = &myList->anchor;
	newElement = (My402ListElem *)malloc(sizeof(My402ListElem));
	if(newElement != NULL) {
		if(My402ListEmpty(myList)) {
			newElement->prev = anchorElement;
			newElement->next = anchorElement;
			anchorElement->next = newElement;
			anchorElement->prev = newElement;
			newElement->obj = elem;
			myList->num_members++;
			
			return TRUE;
		} else {
			return My402ListInsertAfter(myList,elem,My402ListLast(myList));		
		}
	} 
	return FALSE;
}
// Prepend the item to the list
int  My402ListPrepend(My402List* myList, void* elem) { 
	return My402ListInsertAfter(myList,elem,My402ListFirst(myList)->prev);			
}
void InserstionSort(My402List *list,void *obj_new){
    My402ListElem *elem = My402ListFirst(list), *next_elem = NULL;
    MyDS *key = NULL, *new_key = NULL, *next_key = NULL;
    long cur_value = 0, new_value = 0, next_value=0;
    int flag = 0;
    
    new_key = obj_new;
    
    // when no element in the list
    if (My402ListEmpty(list)) {
        My402ListAppend(list,obj_new);
    }
    
    else{
        for (elem = My402ListFirst(list);
             elem != NULL;
             elem = My402ListNext(list, elem) ) {
            
            next_elem = My402ListNext(list, elem);
            
            if( next_elem != NULL){
                
                
                key = elem->obj;
                next_key = next_elem->obj;
                next_value = atol(next_key->t_date);
                
                
                cur_value = atol(key->t_date);
                new_value = atol(new_key->t_date);
                
                
                if(new_value == cur_value){
                    fprintf(stderr,"Same TimeStamps!!!\n");
                    exit(1);
                }
                
                if(new_value > cur_value && new_value < next_value ){
                    flag = My402ListInsertAfter(list, obj_new, elem);
                    if(!flag){
                        fprintf(stderr,"Error while inserting obj after elem\n");
                        exit(1);
                    }
                    break;
                    
                    
                }
                else if(new_value< cur_value){
                    flag = My402ListInsertBefore(list, obj_new, elem);
                    if(!flag){
                        fprintf(stderr,"Error while sorting\n");
                        exit(1);
                    }
                    break;
                    
                }
            }
            else if(next_elem == NULL){
                
                new_value = atol(new_key->t_date);
                key = elem->obj;
                cur_value = atol(key->t_date);
                
                
                if(new_value == cur_value){
                    fprintf(stderr,"Same TimeStamps!!!\n");
                    exit(1);
                }
                
                if(new_value < cur_value){
                    flag = My402ListInsertBefore(list, obj_new, elem);
                    if(!flag)
                        fprintf(stderr,"Error while inserting obj before elem\n");
                }
                else{
                    flag = My402ListInsertAfter(list, obj_new, elem);
                    if(!flag){
                        fprintf(stderr,"Error while inserting obj after elem when one element is there!!\n");
                    }
                }
                break;
            }
        }
        
    }
    
}