Пример #1
0
 link newNode(int i)
 {
   link x = deleteNext(freelist);
   x->item = i; 
   x->next = x;
   return x;
 }
Пример #2
0
void Token::deleteThis()
{
    if (_next) {
        _str = _next->_str;
        _isName = _next->_isName;
        _isNumber = _next->_isNumber;
        _isBoolean = _next->_isBoolean;
        _isUnsigned = _next->_isUnsigned;
        _isSigned = _next->_isSigned;
        _isPointerCompare = _next->_isPointerCompare;
        _isLong = _next->_isLong;
        _isUnused = _next->_isUnused;
        _varId = _next->_varId;
        _fileIndex = _next->_fileIndex;
        _linenr = _next->_linenr;
        _link = _next->_link;
        if (_link)
            _link->link(this);

        deleteNext();
    } else if (_previous) {
        // This should never be used for tokens
        // at the end of the list
        str(";");
    } else {
        // We are the last token in the list, we can't delete
        // ourselves, so just make us ;
        str(";");
    }
}
Пример #3
0
LinkNode List::newNode(int i)
{
  LinkNode x = deleteNext(freeList);
  x->data = i;
  x->next = x;
  return x;
}
Пример #4
0
LinkList newNode(int i)
{
    LinkList x = deleteNext(freelist);//从分配的链表中摘取一个节点
    x->item = i;
    x->next = x;
    return x;
}
Пример #5
0
void Token::deleteThis()
{
    if (_next) { // Copy next to this and delete next
        _str = _next->_str;
        _type = _next->_type;
        _isUnsigned = _next->_isUnsigned;
        _isSigned = _next->_isSigned;
        _isPointerCompare = _next->_isPointerCompare;
        _isLong = _next->_isLong;
        _isStandardType = _next->_isStandardType;
        _isExpandedMacro = _next->_isExpandedMacro;
        _isAttributeConstructor = _next->_isAttributeConstructor;
        _isAttributeUnused = _next->_isAttributeUnused;
        _varId = _next->_varId;
        _fileIndex = _next->_fileIndex;
        _linenr = _next->_linenr;
        _link = _next->_link;
        _scope = _next->_scope;
        _function = _next->_function;
        _variable = _next->_variable;
        _originalName = _next->_originalName;
        if (_link)
            _link->link(this);

        deleteNext();
    } else if (_previous && _previous->_previous) { // Copy previous to this and delete previous
        _str = _previous->_str;
        _type = _previous->_type;
        _isUnsigned = _previous->_isUnsigned;
        _isSigned = _previous->_isSigned;
        _isPointerCompare = _previous->_isPointerCompare;
        _isLong = _previous->_isLong;
        _isStandardType = _previous->_isStandardType;
        _isExpandedMacro = _previous->_isExpandedMacro;
        _isAttributeConstructor = _previous->_isAttributeConstructor;
        _isAttributeUnused = _previous->_isAttributeUnused;
        _varId = _previous->_varId;
        _fileIndex = _previous->_fileIndex;
        _linenr = _previous->_linenr;
        _link = _previous->_link;
        _scope = _previous->_scope;
        _function = _previous->_function;
        _variable = _previous->_variable;
        _originalName = _previous->_originalName;
        if (_link)
            _link->link(this);

        Token* toDelete = _previous;
        _previous = _previous->_previous;
        _previous->_next = this;

        delete toDelete;
    } else {
        // We are the last token in the list, we can't delete
        // ourselves, so just make us empty
        str("");
    }
}
Пример #6
0
void Token::deleteThis()
{
    if (_next) { // Copy next to this and delete next
        _str = _next->_str;
        _tokType = _next->_tokType;
        _flags = _next->_flags;
        _varId = _next->_varId;
        _fileIndex = _next->_fileIndex;
        _linenr = _next->_linenr;
        _link = _next->_link;
        _scope = _next->_scope;
        _function = _next->_function;
        _variable = _next->_variable;
        _type = _next->_type;
        if (_next->_originalName) {
            delete _originalName;
            _originalName = _next->_originalName;
            _next->_originalName = nullptr;
        }
        values = _next->values;
        if (_link)
            _link->link(this);

        deleteNext();
    } else if (_previous && _previous->_previous) { // Copy previous to this and delete previous
        _str = _previous->_str;
        _tokType = _previous->_tokType;
        _flags = _previous->_flags;
        _varId = _previous->_varId;
        _fileIndex = _previous->_fileIndex;
        _linenr = _previous->_linenr;
        _link = _previous->_link;
        _scope = _previous->_scope;
        _function = _previous->_function;
        _variable = _previous->_variable;
        _type = _previous->_type;
        if (_previous->_originalName) {
            delete _originalName;
            _originalName = _previous->_originalName;
            _previous->_originalName = nullptr;
        }
        values = _previous->values;
        if (_link)
            _link->link(this);

        Token* toDelete = _previous;
        _previous = _previous->_previous;
        _previous->_next = this;

        delete toDelete;
    } else {
        // We are the last token in the list, we can't delete
        // ourselves, so just make us empty
        str("");
    }
}
Пример #7
0
int main(int argc, char **argv)
{
    /** VARIÁVEIS *****************************************************/
        int i, N, M;
        Node t, x; link teste;
        
        if(argc != 3)
        {
            printf("USAGE: josephus <n_people> <m>\n");
            return EXIT_FAILURE;
        }
        
        N = atoi(argv[1]); M = atoi(argv[2]);
        printf("Último membro restante: %d\n", N);
        printf("Último membro restante: %d\n", M);
    
    /** INICIA LISTA **************************************************/ 
        initNodes(N); /* Não há mais que N argumentos */
        
        /* 
         * Estamos assumindo que cada nódulo, ao ser criado, 
         * aponta para si mesmo.
         */
        
        /* Inicializamos x com newNode(1) para termos onde 
         * adicionar os próximos elementos */
        for(i = 2, x = newNode(1); i <= N; i++)
        {
            t = newNode(i); insertNode(x,t); x = t;
        }
        
        for(teste = x; Next(teste) != x; teste = Next(teste))
        {
            printf("%d ", Item(teste));
        }
        
        while(x != Next(x))
        {
            for(i = 1; i < M; i++)
            {
                printf("%d ", Item(x));
                x = Next(x);
            }
            freeNode(deleteNext(x));
            /* Cada vez que caminhamos pela lista, vamos 
             * fazendo a remoção dos elementos. Logo, po-
             * demos apenas ir seguindo os argumentos con-
             * forme a necessidade. */
        }
        
        printf("Último membro restante: %d\n", Item(x));
    
    return 0;
}
link_t free_even_nodes(link_t head)
{
	link_t x,t;

	for(x=Next(head);x!=NULL && Next(x)!=NULL;x=Next(x)){
		t=deleteNext(x);
		free(t);
	}

	return(head);	
}
Пример #9
0
void
freeList(LinkList *xList) {

    if (!xList) return;

    iscsi_dev *dev = xList->head;
    while (dev->next != dev->next->next) {
	deleteNext(xList, dev);
    }
    freeElem(xList->head);
    freeElem(xList->tail);
    free(xList);
}
link_t free_nodes(link_t head)
{
    link_t x;
    int i;

    x=head;
    while(Next(x)!=NULL) {
        for(i=1; i<5 && Next(x)!=NULL; x=Next(x),i++);

        if(Next(x)!=NULL)
            free(deleteNext(x));
    }

    return(head);
}
link_t quit(link_t x)
{
	int i;

	if(x==Next(x))
		return(x);

	for(i=1;i<M;x=Next(x),i++)
		;

	printf("%d ",Item(Next(x)));

	freeNode(deleteNext(x));

	return(quit(x));	
}
link_t move_largest_item(const link_t head)
{
	link_t x=head,next_max,max,last_node;
	double max_value;
	
	for(max_value=Item(Next(x)),next_max=x;Next(x)!=NULL;x=Next(x))
		if(Item(Next(x)) > max_value)
			max_value=Item(Next(x)),next_max=x;
	last_node=x;

	if(Next(next_max)!=last_node){
		max=deleteNext(next_max);
		insertNext(last_node,max);
	}
	
	return(head);
}
Пример #13
0
int main(int argc, char *argv[])
{
	int i, N = atoi(argv[1]), M = atoi(argv[2]);
	Node t, x;
	initNode(N);
	for (i = 2, x = newNode(1); i <= N; ++i) {
		t = newNode(1);
		insertNext(x, t);
		x = t;
	}
	while (x != Next(x)) {
		for (i = 1; i < M; i++)
			x = Next(x);
		freeNode(deleteNext(x));
	}
	printf("%d\n", Item(x));
}	
Пример #14
0
void Token::deleteThis()
{
    if (_next) { // Copy next to this and delete next
        takeData(_next);
        _next->link(nullptr); // mark as unlinked
        deleteNext();
    } else if (_previous && _previous->_previous) { // Copy previous to this and delete previous
        takeData(_previous);

        Token* toDelete = _previous;
        _previous = _previous->_previous;
        _previous->_next = this;

        delete toDelete;
    } else {
        // We are the last token in the list, we can't delete
        // ourselves, so just make us empty
        str("");
    }
}