bcc-ufg-ed1 / ListaEnc

Este repositório contém o projeto do TAD ListaEnc, utilizado na disciplina de Estrutura de Dados 1 - Bacharelado em Ciência da Computação/Universidade Federal de Goiás/Jataí
0 stars 4 forks source link

IndexOf #1

Open pauloafpjunior opened 9 years ago

pauloafpjunior commented 9 years ago

Criar uma função capaz de retornar a posição de um determinado item na lista. Caso haja duplicações, a posição retornada é da primeira ocorrência do item na lista. Caso o item não esteja na lista, deve-se retornar o valor -1.

MarceloGouveia77 commented 9 years ago

Eu fiz uma função aqui, não sei se é o jeito certo, porém é 50% funcional, kkk, quando o número tá na lista, ela funciona normalmente, mas quando eu passo um número que não tá, ele deveria rodar o while até ser diferente de NULL, não entrar no if, e então sair do while, e retornar -1, mas quando vou rodar com um número que não tá na lista da aquela janela de programa não respondendo, qual o erro?

int indexOf(ListaEnc* lista, int pos, int item){ if (lista == NULL) return ESTRUTURA_NAO_INICIALIZADA; if (estahVazia(lista)) return ESTRUTURA_VAZIA; int cont=0; No aux; pos = NULL; aux = lista->inicio; while(aux->item != NULL){ if(aux->item == item){ pos = cont; return OK; } aux = aux->prox; cont++; } free(aux); aux = NULL; return -1; }

pauloafpjunior commented 9 years ago

Alguns problemas:

  1. *pos = NULL não pode, pois pos é um ponteiro para inteiro.
  2. A condição de parada do laço está incorreta. Quem pode se tornar NULL é o ponteiro aux e não o aux->item.
  3. Não se dá free no aux, pois ele não é uma variável instanciada dinamicamente. Além disso, ela pode apontar pra um elemento da lista e você vai desalocá-lo assim.
  4. Você deve retornar OK na última linha e colocar o -1 na variável pos, assim: *pos = -1;

Acho que era isso!

MarceloGouveia77 commented 9 years ago

e assim?

int indexOf(ListaEnc* lista, int *pos, int item)
{
    if (lista == NULL)
        return ESTRUTURA_NAO_INICIALIZADA;
    if (estahVazia(lista))
        return ESTRUTURA_VAZIA;
    int cont=0;
    *pos = -1;
    No *aux;
    aux = lista->inicio;
    while(aux != NULL){
        if(aux->item == item){
            *pos = cont;
            return OK;
        }
        aux = aux->prox;
        cont++;
    }
    return OK;
}
pauloafpjunior commented 9 years ago

Excelente, @MarceloGouveia77.