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 insereNoInicio(Lista *l, void *info) { Elemento *p = aloca_elemento(l->tamInfo, info); p->proximo = l->cabeca; l->cabeca = p; return 1; //Sucesso }
int insereNoInicio(LDE *l, void *info) { EleDuplo *p = aloca_elemento(l->tamInfo, info); if (p == NULL) return 0; p->proximo = l->cabeca; p->anterior = NULL; l->cabeca = p; if (p->proximo != NULL) p->proximo->anterior = p; 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 }
void inserir (fila_ordenada_t * fila, aviao_t * dado) { pthread_mutex_lock (&fila->mutex); elemento_t *e = aloca_elemento (dado); if (fila->n_elementos == 0) { fila->primeiro = e; fila->ultimo = e; } else { if (dado->combustivel < 10) { fila->primeiro->anterior = e; e->proximo = fila->primeiro; fila->primeiro = e; } else { if (dado->id < fila->ultimo->dado->id) { elemento_t *a = fila->primeiro; while (a->dado->combustivel < 10) { a = a->proximo; } elemento->proximo = a->proximo; elemento->anterior = a; a->proximo->anterior = elemento; a->proximo = elemento; } else { fila->ultimo->proximo = elemento; elemento->anterior = fila->ultimo; fila->ultimo = elemento; } } } fila->n_elementos++; pthread_mutex_unlock (&fila->mutex); }