Oi, galera. Então, gostaria muito de pedir a ajuda de vocês pra eu resolver esse probleminha.
É um programa que tem as opções: Verifica se a lista esta vazia, Insere item no início da lista, Insere item no fim da lista, Remove itens da lista, Localiza itens da lista, Informa a quantidade de elementos existentes na lista, Imprime itens da lista, Sair.
Está dando erro logo que aperta o botão 1 para criar a lista, e as opções 2 e 3 dão erro logo no final. Bom, e todos os outros estão dando erro também, talvez devido à criação da lista...
Enfim, o código está abaixo. Agradeço MUITO qualquer ajuda!! Obrigada!
Pergunta
Sweetie_
Oi, galera. Então, gostaria muito de pedir a ajuda de vocês pra eu resolver esse probleminha.
É um programa que tem as opções: Verifica se a lista esta vazia, Insere item no início da lista, Insere item no fim da lista, Remove itens da lista, Localiza itens da lista, Informa a quantidade de elementos existentes na lista, Imprime itens da lista, Sair.
Está dando erro logo que aperta o botão 1 para criar a lista, e as opções 2 e 3 dão erro logo no final. Bom, e todos os outros estão dando erro também, talvez devido à criação da lista...
Enfim, o código está abaixo. Agradeço MUITO qualquer ajuda!! Obrigada!
#include <conio.h>
#include <malloc.h>
#include <string.h>
typedef struct
{
int chave;
char nome[30];
int i, idade;
} TipoItem;
struct Celula
{
TipoItem Item;
Celula* Prox;
};
typedef struct
{
Celula* Primeiro;
Celula* Ultimo;
Celula* Proximo;
} TipoLista;
//Cria Lista vazia
void FLVazia (TipoLista * Lista)
{
Lista ->Primeiro=(Celula*)malloc(sizeof(Celula));
Lista ->Ultimo=Lista->Primeiro;
Lista ->Primeiro->Prox=NULL;
}
//Verifica se a lista está vazia
int Vazia (TipoLista Lista)
{
return (Lista.Primeiro == Lista.Ultimo);
}
//Insere elemento no inicio da lista
void InsereInicio(int jaux, TipoItem x, TipoLista *Lista)
{
int i;
Celula *paux, *Aux;
paux = (Celula*) malloc (sizeof(Celula));
paux -> Item = x;
paux -> Prox = Lista -> Primeiro -> Prox;
Lista -> Primeiro ->Prox = paux;
}
//Insere elemento no fim da lista
void InsereFim (TipoItem x, TipoLista *Lista)
{
Lista -> Ultimo -> Prox = (Celula*) malloc (sizeof(Celula));
Lista -> Ultimo = Lista -> Ultimo -> Prox;
Lista -> Ultimo -> Item = x;
Lista -> Ultimo -> Prox = NULL;
}
//Exclui elemento que se encontra na posição informada
void Retira (Celula* p, TipoLista *Lista)
{
Celula* q;
if (Vazia(*Lista)||p->Prox==NULL)
{
printf ("Erro: a posicao não existe.\n");
getch();
}
else
{
q=p->Prox;
p->Prox=q->Prox;
if (p->Prox==NULL)
Lista->Ultimo=p;
free(q);
}
}
//Encontra o endereco de um elemento a partir do seu codigo
Celula* Localiza (int cod, TipoLista *Lista)
{
Celula* paux;
paux=Lista->Primeiro;
while ((paux->Prox != NULL) && (paux->Prox->Item.chave != cod))
{
paux=paux->Prox;
}
return (paux);
}
//Imprime os elementos da lista
void Imprime (TipoLista Lista)
{
Celula* Aux;
int i=1;
Aux = Lista.Primeiro -> Prox;
while (Aux != NULL)
{
printf ("\n\nCodigo do elemento %d: %d", i, Aux->Item.chave);
printf ("\nNome do elemento %d: %s", i, Aux->Item.nome);
printf ("\nIdade do elemento %d: %d", i, Aux->Item.idade);
getch();
Aux=Aux->Prox;
i++;
}
}
main()
{
char op;
int iaux, jaux=0;
TipoLista *Lista_Real;
TipoItem Item_Real;
Celula* ponteiro;
while (op!='0')
{
printf ("\n\nEscolha uma opcao: ");
printf ("\n\n1 - Cria lista;");
printf ("\n2 - Verifica se a lista esta vazia;");
printf ("\n3 - Insere item no início da lista;");
printf ("\n4 - Insere item no fim da lista;");
printf ("\n5 - Remove itens da lista;");
printf ("\n6 - Localiza itens da lista;");
printf ("\n7 - Informa a quantidade de elementos existentes na lista;");
printf ("\n8 - Imprime itens da lista;");
printf ("\n\n0 - Sair;\n");
op=getche();
switch (op)
{
case '1': FLVazia (Lista_Real);
break;
case '2': if (Vazia (*Lista_Real))
printf ("\nLista vazia!\n");
else
printf ("\nA lista não encontra-se vazia!\n");
break;
case '3': jaux++;
printf ("\n\nDigite um codigo numerico para o elemento: ");
scanf ("%d",&Item_Real.chave);
fflush(stdin);
printf ("\n\nDigite o nome do elemento a ser cadastrado: ");
gets (Item_Real.nome);
printf ("\n\nDigite uma idade para o elemento a ser cadastrado: ");
scanf ("%d",&Item_Real.idade);
InsereInicio (jaux, Item_Real, Lista_Real);
break;
case '4':
printf ("\n\nDigite um codigo numerico para o elemento: ");
scanf ("%d",&Item_Real.chave);
fflush(stdin);
printf ("\n\nDigite o nome do elemento a ser cadastrado: ");
gets (Item_Real.nome);
printf ("\n\nDigite uma idade para o elemento a ser cadastrado: ");
scanf ("%d",&Item_Real.idade);
InsereFim (Item_Real, Lista_Real);
break;
case '5':
printf ("\nDigite o codigo do elemento a remover: ");
scanf ("%d",&iaux);
ponteiro=Localiza(iaux,Lista_Real);
if (ponteiro==NULL)
{
printf ("\nRemocao não realizada.");
getch();
}
else
{
Retira (ponteiro, Lista_Real);
}
break;
case '6':
printf ("\nDigite o codigo do elemento a localizar: ");
scanf ("%d",&iaux);
ponteiro=Localiza(iaux,Lista_Real);
if (ponteiro==NULL)
{
printf ("\nElemento não encontrado.");
getch();
}
else
{
Localiza (iaux, Lista_Real);
getch();
}
break;
case '7':
if (jaux==0)
printf ("\nLista vazia\n\n");
else printf ("\nHa %d elemento(s) na lista!\n\n",jaux);
getch ();
break;
case '8':
Imprime (*Lista_Real);
break;
default: printf ("\n\nOpcao invalida: escolha outra opcao!...");
}
}
}
Editado por Sweetie_Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.