Ir ao conteúdo
  • Cadastre-se

Lista Encadeada- =( O que eu to fazendo errado?


*GP*

Posts recomendados

Esse é meu primeiro programinha com listas encadeadas...

To aprendendo na "marra" xD

A ideia é criar uma agenda telefônica ..

Aparentemente, está tudo funcionando , exceto na hora de excluir...

Exclui se for o primeiro , se for do meio ou o último ele deleta todos os valores que foram acrescentados após o valor escolhido ...

Vejam:

obs: O que está como comentário está errado ou incompleto, ignorem...


#include <stdlib.h>
#include <string.h>
#include <stdio.h.>



// Estrutura da lista encadeada
typedef struct ListaDupEnc {

char nomek[10];
int tel;
struct ListaDupEnc *ant; //Definição dos ponteiros anterior e prox
struct ListaDupEnc *prox;

} ListaDupla;

ListaDupla *L; // O L é um ponteiro para a lista duplamente encadeada

ListaDupla * cria_lista()
{
return NULL;
}

int lista_vazia(ListaDupla *L)
{
return(L==NULL);
}

ListaDupla * insere_lista(ListaDupla *L,int TEL,char NOME[10])
{


ListaDupla *NovaL= (ListaDupla*) malloc (sizeof(ListaDupla));

NovaL->tel=TEL;

strcpy(NovaL->nomek,NOME);
if(L==NULL)
{
NovaL->ant=NULL;
NovaL->prox=NULL;

}//Fecha if
else
{
NovaL->prox=L;
NovaL->ant=NULL;
}//Fecha else

system("pause");
return NovaL;

}

void exibe_lista(ListaDupla *L)
{

ListaDupla *aux;
printf("\t\tNome\t\tTel\n");
for(aux=L;aux!=NULL;aux=aux->prox)
{

printf("\t\t%s",aux->nomek);
printf("\t\t%d\n",aux->tel);

}
system("pause");

}

ListaDupla * busca_tel(ListaDupla *L,int TEL,int d)
{
ListaDupla *aux;
ListaDupla *ant=NULL;

for(aux=L;aux!=NULL;aux=aux->prox)
{

if(aux->tel==TEL)
{
printf("\t\tNumero encontrado\n");
printf("\t\tNome\t\tTel\n");
printf("\t\t%s",aux->nomek);
printf("\t\t%d\n",aux->tel);
if(d==1)
{
if(ant==NULL)
{
L=aux->prox;
}

else

aux->ant->prox= aux-> prox;
aux->prox->ant= aux-> ant;

}// FECHA D==1
free(aux);
system("pause");
return L ;

}//Fecha IF busca tel

}// FECHA FOR




}// FECHA FUNCAO LISTA


/*ListaDupla * busca_nome(ListaDupla *L,char NOME[10],int d)
{
ListaDupla *aux;

for(aux=L;aux!=NULL;aux=aux->prox)
{
if(!strcmp(aux->nomek,NOME)
{
printf("\t\tNome encontrado\n");
printf("\t\tNome\t\tTel\n");
printf("\t\t%s",aux->nomek);
printf("\t\t%d\n",aux->tel);
if(d==1)
{

if(L==aux)
L=aux->prox;
else
aux->ant->prox=aux->prox;

if (aux->prox!=NULL)
{
aux->prox->ant=aux->ant;

system("pause");
free(aux);
return L;

}
}

}

}
system("pause");
return L;
}
*/

int main()
{
int escolha=0,escolha_b=0,telefone=0;
char nome[10];
ListaDupla *listaD =cria_lista();

do{
system("cls");
printf("\n\n\t\t+--------------------------------+\n");
printf("\t\t| MENU |\n");
printf("\t\t+--------------------------------+\n");
printf("\t\t|\t[1] - Cadastrar |\n");
printf("\t\t|\t[2] - Exibe |\n");
printf("\t\t|\t[3] - Buscar |\n");
printf("\t\t|\t[4] - Deletar campo |\n");
printf("\t\t|\t[5] - Creditos |\n");
printf("\t\t|\t[9] - Sair |\n");
printf("\t\t+--------------------------------+\n\n\n");
printf("Opcao: ");
scanf("%d",&escolha);

switch(escolha)
{
case 1:

printf("Digite um nome: ");
fflush(stdin);
gets(nome);

printf("Digite um telefone: ");
scanf("%d",&telefone);
listaD=insere_lista(listaD,telefone,nome);
break;

case 2:
if(!lista_vazia(listaD))
exibe_lista(listaD);
else
{
printf("\n\nNao ha nenhum cadastro registrado...\n\n");
system("pause");
}
break;
case 3:
printf("[1]-Busca por telefone\n");
printf("[2]-Busca por nome\n");
scanf("%d",&escolha_B);
if(escolha_b==1)
{
printf("Digite o numero que voce deseja buscar\n");
scanf("%d",&telefone);
busca_tel(listaD,telefone,0);
}
else if(escolha_b==2)
{
printf("Digite o nome que voce deseja buscar\n");
scanf("%d",&nome);
//busca_nome(listaD,nome,0);
}
break;

case 4:

printf("[1]-Deletar por telefone\n");
printf("[2]-Deletar por nome\n");
scanf("%d",&escolha_B);
if(escolha_b==1)
{
printf("Digite o numero que voce deseja deletar\n");
scanf("%d",&telefone);
listaD=busca_tel(listaD,telefone,1);
}
else if(escolha_b==2)
{
printf("Digite o nome que voce deseja deletar\n");
scanf("%d",&nome);
// listaD=busca_nome(listaD,nome,1);
}


}//Fecha o switch
}while(escolha!=9);//Fecha o Do..While
}//Fecha o main
#include <stdio.h>

Aproveitando, depois que resolver esse problema criarei uma função que ordena em ordem alfabética...

Mas não tenho nem ideia de como fazer isto, alguém tem uma dica? xD

Obrigada!

Link para o comentário
Compartilhar em outros sites

Plateu.. obrigada pela dica, mas eu ja sei fazer uma lista duplamente encadeada "normal" ...

A ideia aí é que ela buscasse e deletasse quando necessário...(Tudo em uma mesma função.... Em duas separadas eu sei fazer ^^ )

Mas eu estou cometendo algum deslize.. que não estou conseguindo enxergar qual é ...

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...