int insereNaPosicao(LDE *l, void *info, int pos) { if(pos < 0) return ERRO_POSICAO_INVALIDA; if(pos == 0) return insereNoInicio(l, info); EleDuplo *aux = l->cabeca; int cont = 0; while(cont < pos-1 && aux->proximo != NULL) { aux = aux->proximo; cont++; } if(cont != pos-1) return ERRO_POSICAO_INVALIDA; EleDuplo *novo = aloca_elemento(l->tamInfo, info); if(novo == NULL) return 0; //Fracasso novo->anterior = aux; novo->proximo = aux->proximo; aux->proximo = novo; if(novo->proximo != NULL) novo->proximo->anterior = novo; return 1; //Sucesso }
int insereNoFim(LDE *l, void *info) { if(l->cabeca == NULL) return insereNoInicio(l, info); EleDuplo *aux = l->cabeca; while(aux->proximo != NULL) { aux = aux->proximo; } EleDuplo *p = aloca_elemento(l->tamInfo, info); p->proximo = NULL; p->anterior = aux; aux->proximo = p; return 1; //Sucesso }
int insereNoFim(Lista *l, void *info) { if(l->cabeca == NULL) { return insereNoInicio(l, info); } Elemento *aux = l->cabeca; while(aux->proximo != NULL) { aux = aux->proximo; } Elemento *p = aloca_elemento(l->tamInfo, info); p->proximo = NULL; aux->proximo = p; return 1; //Sucesso }