Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Yuri Serrano

Bug Monstro

Recommended Posts

Boa tarde senhores.

Estou fazendo um programa para a minha universidade e o mesmo necessita de uma função de remoção.

A mesma funciona bem exceto pelo fato de não conseguir remover o 1° elemento já fiz tratamento etc e o mesmo não funciona como já viciei na lógica e no código não conseguindo averiguar o que pode estar dando de errado,peço que quem puder me ajudar a tentar detectar este erro ficarei grato.A váriavel nodeptr lista é um ponteiro já declarado anteriormente.




void Remove_id(Nodeptr lista)
{

int achou=0,cont=0;
Nodeptr tmp= lista;
Nodeptr juntou,aux;
char chave[MAX];
clean_stdin(stdin);
printf("Digite o ID a ser buscado:");
gets(chave);
printf("\n");

//Correndo a lista e verificando se encontrou
//a string buscada, se sim, aumenta o
//contador e seta a variável de busca
while (tmp != NULL)
{
if (strcmp(chave, tmp->info.id) == 0)
{
achou=1;
cont++;
}
tmp = tmp->link;
}

//Se encontrou a busca
if(achou==1)
{
int ind=0;
//Correndo a lista
for(ind=0;ind<cont;ind++)
{
//Se encontrou na primeira casa
//apaga a primeira casa
if(strcmp(chave,lista->info.id)==0)
{
aux=lista;
lista=aux->link;
free(aux);
}
//Senão, procura até encontrar
else
{
aux=lista;
//Posiciona na frente do encontro
//para exclusão
while(strcmp(chave,aux->info.id)!=0)
{
aux=aux->link;
}

juntou=lista;
//Enquanto o auxiliar juntou for
//diferente do posicionado para
//exclusão
while(juntou != NULL && juntou->link!=aux)
{
juntou=juntou->link;
}
//Aponta para o próximo valor válido
if (juntou != NULL) juntou->link=aux->link;

free(aux);
}
}
printf( "Excluido.\n");
}
else
printf( "Nenhum resultado encontrado.\n");

getchar();

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não use gets.

Fica difícil saber qual é o defeito sem executar o programa. Fica difícil executar o programa sem ter o código completo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal consegui resolver o problema agora vem a dúvida,eu consegui fazer com que ele remova um elemento,mas ele para quando acha esse elemento e remove só ele não removendo elementos duplicados,como eu faria pra fazer esse código abaixo eliminar os elementos duplicados?

 

 

void Remove_id(Nodeptr *lista)
{
Nodeptr ant = NULL;
Nodeptr p = *lista;
int cont,ind;
char chave[MAX];
clean_stdin(stdin);
printf("Digite o ID a ser buscado:");
gets(chave);
printf("\n");
//Correndo a lista e verificando se encontrou
//a string buscada, se sim, aumenta o
//contador e seta a variável de busca
while (p != NULL && strcmp(chave, p->info.id) > 0 )
{
ant=p;
p=p->link;
}
if(p==NULL)
printf("Elemento não encontrado\n");
if(ant==NULL)
{
*lista=p->link;
}
else
{
ant->link=p->link;
}
free(p);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.