Ir para conteúdo
Fórum Script Brasil
  • 0

Remover ultimo elemento- duplamente encadeada


jhoul

Pergunta

tem algo erra no remover quando eu mando remover o ultimo elemento ele da um bug.

#include<stdio.h>

#include<stdlib.h>

typedef struct reg {

struct reg *ant;

int dado;

struct reg *prox;

}def_lista;

def_lista *lista=NULL;

int insere_inicio(int valor)

{

def_lista *aux;

aux = (def_lista *) malloc(sizeof(def_lista));

if (aux==NULL)

return 0;

aux->dado = valor;

aux->prox = NULL;

if (lista==NULL)

lista = aux;

else

{

aux->prox = lista;

lista = aux;

}

return 1;

}

int insere_ordenado(int valor)

{

def_lista *aux,*aux1,*aux2;

aux = (def_lista *)malloc(sizeof(def_lista));

aux -> dado = valor;

aux -> prox = NULL;

aux -> ant = NULL;

if(lista == NULL)

lista = aux;

else

{

aux1 = lista;

if(valor < lista -> dado)

{

aux -> prox = lista;

lista = aux;

aux1->ant = lista;

}

else

{

while(valor > aux1 -> dado && aux1 -> prox != NULL)

aux1 = aux1->prox;

if(valor < aux1->dado)

{

aux2 = aux1->ant;

aux1 -> ant = aux;

aux -> prox = aux1;

aux -> ant = aux2;

aux2 -> prox = aux;

}

else if(aux1->prox == NULL)

{

aux1->prox = aux;

aux->ant = aux1;

}

}

}

}

int remover(int valor)

{

def_lista *aux,*aux1,*aux2;

aux2 = lista;

aux = lista;

aux1 = lista->prox;

if(valor == lista->dado)

{

lista = lista -> prox;

aux1->ant = NULL;

free(aux2);

printf("Removeu o %d\n\n",valor);

system("pause");

return 1;

}

while((aux1->prox != NULL) && (aux1->dado != valor)){

aux = aux1;

aux1 = aux1->prox;

}

if(aux1 != NULL)

{

aux = aux1->prox;

aux2->prox = aux;

aux->ant = aux2;

printf("Removeu o %d\n\n",valor);

system("pause");

return 1;

}

if(aux1->prox == NULL)

{

aux->prox = NULL;

free(aux1);

printf("Removeu o %d\n\n",valor);

system("pause");

return 1;

}

}

busca(int valor)

{

def_lista *aux,*aux1;

aux1 = lista;

if(lista == NULL)

puts("lista vazia");

else

{

do

{

if(aux1 -> dado == valor){

printf("Achou o %d \n\n",aux1 -> dado);

return 1;}

else

aux1 = aux1 -> prox;

}while(aux1 != NULL);

if (aux != NULL)

printf("não achou o %d\n\n",valor);

}

}

int imprimir()

{

def_lista *aux, *aux1;

aux=lista;

while(aux != NULL)

{

printf(" é %d\n",aux->dado);

aux1 = aux;

aux = aux->prox;

}

while(aux1 != NULL)

{

printf("é %d\n",aux1->dado);

aux1 = aux1->ant;

}

}

main()

{

int num;

char op;

do {

system ("cls");

puts ("\n\n ********** LISTAS DINAMICAS **********\n\n");

puts(" \xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC");

puts(" \xDB DIGITE 1 PARA INSERIR NO INICIO \xDB");

puts(" \xDB DIGITE 2 PARA INSERIR NO FIM \xDB");

puts(" \xDB DIGITE 3 PARA INSERIR ORDENADAMENTE\xDB");

puts(" \xDB DIGITE 4 PARA IMPRIMIR LISTA \xDB");

puts(" \xDB DIGITE 5 PARA REMOVER ELEMENTO \xDB");

puts(" \xDB DIGITE 6 PARA BUSCAR ELEMENTO \xDB");

puts(" \xDB DIGITE 7 PARA SAIR DO PROGRAMA \xDB");

puts(" \xDB\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDC\xDB");

puts(" ENTRE COM A OPCAO DESEJADA: ");

puts(" \x1F");

printf(" ");scanf("%d",&op);

system ("cls");

switch(op)

{

// case 1:

// puts("\nInsira um numero\n");

// scanf("%d",&num);

// insere_inicio(num);

// system("cls");

// break;

//

// case 2:

// puts("\ninsira a direita\n");

// scanf("%d", &num);

// insere_direita(num);

// system("cls");

// break;

case 3:

puts("\nentre com um valor no inicio\n");

scanf("%d",&num);

insere_ordenado(num);

system ("cls");

break;

case 4:

imprimir();

system ("pause");

break;

case 5:

if(lista == NULL){

puts("\nlista vazia\n\n");

system("pause");

break;}

puts("\nentre com o numero removido\n");

scanf("%d",&num);

remover(num);

break;

case 6:

if (lista == 0){

puts("\nlista vazia\n\n");

system("pause");

break;}

puts("\nentre com um numero para busca\n");

scanf("%d",&num);

busca(num);

system("pause");

break;

// case 7:

// puts("\n...FIM DO PROGRAMA...\n");

// break;

default:

system ("cls");

puts ("\nNumero Invalido!\n");

system ("pause");

} // fim do switch

} while (op != 7);// fim laço do

getch();

} // fim da classe main

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...