jhoul Postado Abril 24, 2010 Denunciar Share Postado Abril 24, 2010 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
jhoul
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
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.