1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

remocao em C

Discussão em 'Programação' iniciada por anthead, 11 de Dezembro de 2008. (Respostas: 2; Visualizações: 451)

  1. anthead

    anthead Power Member

    boas,

    ando completamente as arenhas pa tentar fazer a funcao que me permite a remocao de um elemento da lista em C...!!

    a minha funcao de isersao é a seguinte:

    Código:
    al novo_aluno;
    al aluno_actual;
    int i;
        novo_aluno = (alunos *) malloc(sizeof(alunos)); 
       
        novo_aluno->numero =numero;
        strcpy((novo_aluno->nome),nome);
        novo_aluno->next = NULL;
    
    if ( n_alunos == NULL) /*se nao ha nenhum elemento na lista*/
        {
            n_alunos=novo_aluno;     
        }
        else 
        {
            aluno_actual =n_alunos;
            while(aluno_actual->next != NULL)
            {
                aluno_actual = aluno_actual->next;
            }
                aluno_actual->next = novo_aluno;    
        }
    
    sugestoes...:)

    cumprimentos,
     
    Última edição: 11 de Dezembro de 2008
  2. Tomb4000

    Tomb4000 Power Member

    Convém guardar o aluno anterior, e o aluno "posterior" da lista se existir. Tiras o pertendido e unes o anterior com o "posterior", isto de o posterior existir se nao existir o anterior fica a apontar para NULL.

    Código:
    NO *Tira(NO *no_aux){ //no_aux é o no inicial da lista
        NO *s; 
        int i=0;
        NO *no_anterior=no_aux;
        NO *no_ant_anterior=NULL;
    
        while (no_aux != NULL){
            i++;
            no_ant_anterior=no_anterior;
            no_anterior=no_aux;
            s=no_au; -- no teu caso o nome do aluno
            no_aux= no_aux->prox;
        }
        
        no_ant_anterior->prox=NULL;
        
        if (i==1){
            no_ant_anterior->valor=NULL;
        }else{
            free(no_anterior);
        }
        return (s);
    }
    
    
    Deve ser assim algo deste género.
     
    Última edição: 11 de Dezembro de 2008
  3. Bem, fiz isto agr. Vais ter de inicializar a lista primeiro a NULL, n_alunos == NULL e dar esta lista como argumento para uma funcao auxiliar de remocao e o nome do aluno k keres remover. Tipo: n_alunos = removerAluno(n_alunos,nomeDoAlunoParaSerRemovido)

    a seguinte funcao eh um exemplo de como podes remover o aluno:
    Código:
    al removerAluno( al lista_n_alunos , char* nomeDoAluno )
    {
      al aux;
      int cmp;
     
      if(lista_n_alunos==NULL)
      {
        printf("Nao foi encontrado nenhum aluno com o nome %s.\n",nomeDoAluno);
        return (lista_n_alunos);
      }
     
      cmp = strcmp(nomeDoAluno,lista_n_alunos.nome); // compara as duas strings
     
      if (cmp != 0) // se a string nomeDoAluno for diferente da string lista_n_alunos.nome
      {
        lista_n_alunos->next = removerAluno(lista_n_alunos->next,nomeDoAluno); // corre a funcao no elemento seguinte da lista recursivamente
        return (lista_n_alunos);
      }
      else // se o cmp for = 0, string nomeDoAluno == lista_n_alunos.nome
      {
        aux = lista_n_alunos->next;
        free(lista_n_alunos);
        printf("O aluno com o nome %s foi removido...\n",nomeDoAluno);
        return(aux);
      }
    }
    
    Ja te deves safar nisso assim :)

    Cumps
     
    Última edição: 14 de Dezembro de 2008

Partilhar esta Página