Jump to content

problema a eliminar 1º elemento de uma lista ligada


Recommended Posts

Posted

Boas,

o problema com que me deparei neste momento foi de eliminar o 1º elemento da lista ligada.

E o seguinte:

seja qual for o elemento que quiser eliminar (excepto o 1º) apos o eliminar ja nao aparece quando faço a listagem.. mas caso queira eliminar o 1º.. quando vou a fazer a listagem no lugar onde estava o 1º elemento aparece como se o elemento tivesse informaçao "corrompida" :dontgetit:

Eis o codigo:

fichaCurso.h

#ifndef FICHACURSO_H
#define FICHACURSO_H
#define MAX_NOME 100
#define MAX_DESCRICAO 300

typedef struct TFichaCurso
{
    char nomeCurso[MAX_NOME+1];
    char descricaoCurso[MAX_DESCRICAO+1];
    unsigned short cicloCurso;
    struct TFichaCurso *fichaSeguinte;
} Elemento, *Ficha;

Ficha inserirCurso(Ficha fichaCurso);
void listarCursos(Ficha fichaCurso);
Ficha removerCurso(Ficha fichaCurso, char nome[]);
Ficha pesquisaCurso(Ficha fichaCurso, char nome[]);
#endif

fichaCurso.c

Ficha removerCurso(Ficha fichaCurso, char nome[])
{
    Ficha fichaEliminar;
    if(fichaCurso)
    {
        fichaEliminar = pesquisaCurso(fichaCurso, nome);
        if(fichaEliminar!=fichaCurso)
        {
            for(;fichaCurso->fichaSeguinte != fichaEliminar; fichaCurso = fichaCurso->fichaSeguinte);
            fichaCurso->fichaSeguinte = fichaEliminar->fichaSeguinte;
            free(fichaEliminar);                
            return fichaCurso;
        }
        else if(fichaEliminar == fichaCurso){
             fichaCurso = fichaEliminar->fichaSeguinte;
             free(fichaEliminar);
             return fichaCurso;}
        else
            printf("Nao existem cursos com o nome pretendido.\n");
    }
    else
    {
        fprintf(stderr, "Nao existem cursos.\n");
        system("pause");
        system("cls");
    }
}

Ficha pesquisaCurso(Ficha fichaCurso, char nome[])
{
      Ficha fichaPesquisa;
      for(fichaPesquisa=fichaCurso;fichaPesquisa;fichaPesquisa = fichaPesquisa->fichaSeguinte)
       if(strcmp(fichaPesquisa->nomeCurso,nome)==0)
           return fichaPesquisa;
}

Espero que me possam dar umas "luzes" 😞

Obrigado pela atençao.

Posted

Entre vários problemas que tens no código, como por exemplo não ter um return em todas as execuções possíveis de pesquisarCurso, na função main (ou onde chamares a função removerCurso) tens que afectar a Ficha que passas como parâmetro com o resultado da função, senão vai ficar a apontar para a Ficha que apagaste.

Desaparecido.

Posted

Ja consegui resolver o problema.. ?

Nao estava a guardar a lista que a funçao removerCurso devolvia ?, ou seja, ao chamar a funçao no menu tinha:

removerCurso(cursos,nome)

em vez de ter

cursos = removerCurso(cursos,nome)

  😞

Obrigado pela ajuda 👍

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.