Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom pessoal, meu professor pediu um trabalho para listar invertido numa lista duplamente encadeada em C, mas não do conseguindo fazer, sera que alguem aki poderia me ajudar. Desde ja agradeço
Me perdoeem o flood, mas é que este trabalho eu preciso entregar hoje, e ja tentei fazer de todo jeito, to tentando com essa função
void list (no L){ no aux; no* ant; for (aux=L;aux!=NULL;aux=aux->prox) for(ant=aux;ant!=NULL;ant=ant->prox) { printf ("\nCod = %d", aux->info.cod); printf ("\nMarca = %s", aux->info.marca); printf ("\nModelo = %s", aux->info.modelo); printf ("\nAno de Fabricacao = %d",aux->info.anofab); printf ("\nAno do Modelo = %d",aux->info.anomod); printf ("\nValor = %f",aux->info.valor); printf ("\n"); }}
se alguem puder me ajudar a arrumar eu agradeço, o meu maior problema, é q a lista ta exibindo assim:
Se eu cadastrar 5 elemetos, ela exibe cinco vezes o ultimo elemento.
Abaixo o prog completo, acima so a função que ta com problema
#include <stdlib.h>#include <stdio.h>#include <conio.h>#include <string.h>struct carro{int cod,anofab,anomod; char marca[50], modelo[50]; float valor;}; typedef struct carro carro; struct regno{ carro info; struct regno prox; struct regno ant;}; typedef struct regno no; carro lerdados (){ carro c; printf ("\nCodigo: "); fflush (stdin); scanf ("%d", & c.cod); printf ("Modelo: "); fflush (stdin); scanf ("%s", & c.modelo); printf ("Marca: "); fflush (stdin); scanf ("%s", & c.marca); printf ("Ano de Fabricacao: "); fflush (stdin); scanf ("%d", & c.anofab); printf ("Ano do Modelo: "); fflush (stdin); scanf ("%d", & c.anomod); printf ("Valor: "); fflush (stdin); scanf ("%f", & c.valor); return c;}int exibirmenu(){ int opcao; printf("\n1. Inserir\n"); printf("2. Listar\n"); printf("3. Verificar se existe conteudo\n"); printf("4. Buscar\n"); printf("5. Remover\n"); printf("6. Sair\n"); printf ("\nDigite uma opcao: "); fflush (stdin); scanf ("%d", & opcao); return opcao;} no init (){ return NULL;} int isempty (no L){ return (L==NULL);} void list (no L){ no aux; no ant; for (aux=L;aux!=NULL;aux=aux->prox) for(ant=aux;ant!=NULL;ant=ant->prox) { printf ("\nCod = %d", aux->info.cod); printf ("\nMarca = %s", aux->info.marca); printf ("\nModelo = %s", aux->info.modelo); printf ("\nAno de Fabricacao = %d",aux->info.anofab); printf ("\nAno do Modelo = %d",aux->info.anomod); printf ("\nValor = %f",aux->info.valor); printf ("\n"); }}no add (no L, carro c){ no ant =NULL; no aux=L; no novo =(no) malloc (sizeof (no)); novo->info.cod=c.cod; novo->info.anofab=c.anofab; novo->info.anomod=c.anomod; strcpy(novo->info.marca,c.marca); strcpy(novo->info.modelo,c.modelo); novo->info.valor=c.valor; novo->ant=NULL; if (L!=NULL) L->ant=novo; return novo;} no find (no L, int cod){ no aux=L; while (aux != NULL) { if (aux-> info.cod==cod) return aux; aux=aux->prox; } return NULL;} no del (no L, int cod){ no aux = find (L, cod); if (aux==NULL) { L=aux->prox; if (L!= NULL) L->ant=NULL; free(aux); return L; } else { aux->ant->prox=aux->prox; if (aux->prox!=NULL) aux->prox->ant=aux->ant; } free (aux); return L;} no destroy (noL){ noaux=L; while (aux->prox!=NULL) { aux=aux->prox; free(aux->ant); } free (aux); return NULL;} int main(){ noL; noaux; carro c; int opc,cod; system("cls"); L=init(); do { opc=exibirmenu(); switch(opc) { case 1:c=lerdados(); L=add(L,c); printf("\nCadastro efetuado com sucesso.\n"); break; case 2:list(L); printf("\n Lista feita com sucesso.\n"); break; case 3:if(isempty(L)) printf("\n Lista vazia.\n"); else printf("\n Lista nao vazia.\n"); break; case 4:printf("\n Informe o codigo:\n"); scanf("%d",&cod); aux=find(L,cod); if(aux!=NULL) { printf("\n Codigo:%d ",aux->info.cod); printf("\n Marca: %s", aux->info.marca); printf("\n Modelo: %s", aux->info.modelo); printf("\n Ano: %s", aux->info.anofab); printf("\n Ano Modelo: %s", aux->info.anomod); printf("\n Valor: %f",aux->info.valor); } else printf("\n\n Codigo nao encontrado.\n"); break; case 5: printf("\nCodigo: "); scanf("%d",&cod); L=del(L,cod); printf(" Codigo removido com sucesso.\n"); break; case 6:printf(" Saindo."); L=destroy(L); break; default: printf(" Opcao Invalida\n"); break; } }while(opc!=6); system("pause"); return 0;}
Carregando comentários...