Dev - C++ - Ayuda con un problema en el codigo de listas enlazadas

 
Vista:
sin imagen de perfil
Val: 60
Ha aumentado su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda con un problema en el codigo de listas enlazadas

Publicado por Patricio (25 intervenciones) el 15/04/2019 01:07:38
En el siguiente codigo tengo una lista de numeros ya ingresados de forma aleatoria.
El tema es que cuando busco por el numero, si el numero que busco es el ULTIMO en la lista, el programa no hace nada, si busco cualquier otro de la lista funciona y no entiendo porque
La funcion buscar_lista se encuentra al final
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
struct lista{
	int numero;
	struct lista *sgte;
};
 
struct lista *primero, *ultimo, *nuevo;
 
void mostrar_menu();
void add_elemento();
void mostrar_lista();
void sort_lista();
void buscar_lista();
 
int main(){
	char opcion;
	int a;
	primero=NULL;
	ultimo=NULL;
	do{
		mostrar_menu();
		opcion = getch();
		switch(opcion){
			case '1':
 
				add_elemento(5);
				add_elemento(7);
				add_elemento(4);
				add_elemento(3);
				add_elemento(1);
				add_elemento(8);
				add_elemento(9);
				add_elemento(2);
				add_elemento(3);
				add_elemento(6);
				add_elemento(3);
				add_elemento(10);
				add_elemento(3);
                                add_elemento(11);
			/*	printf("\nIngrese nuevo numero: ");
				scanf("%d", &a);
				add_elemento(a);*/
 
				break;
			case '2':
				printf("\nPendiente --->..........");
				break;
			case '3':
				mostrar_lista();
				break;
			case '4':
				sort_lista();
				break;
			case '5':
				printf("\nIngrese numero que busca: ");
				scanf("%d", &a);
				buscar_lista(a);
				break;
			case '6':
				exit(1);
				default: printf("\nOpcion Invalida, cerrando programa.");
		}
	}while(opcion!='6');
	return 0;
}
 
void mostrar_menu(){
	printf("\n\n\t\tMenu:\n\t\t=====\n\n");
	printf("\t1.- Add element\n");
	printf("\t2.- Borrar elementos (PENDIENTE)......\n"); //eliminar no esta consideradoe en la solemne, solo eliminar el primero o ultimo
	printf("\t3.- Mostrar Lista en pantalla\n");
	printf("\t4.- Ordenar lista de Mayor a Menor\n");
	printf("\t5.- Buscar lista\n");
	printf("\t6.- Salir\n\n");
	printf("\t\tEscoge una opcion: ");
	fflush(stdin);
}
 
void add_elemento(int x){
	nuevo = (struct lista*)malloc(sizeof(struct lista));
	//if(nuevo==NULL)
	//	printf("\nNo hay datos");
	//else{
		//printf("\n Nuevo Numero Ingresado Es: %d ",x);
		nuevo->numero=x;
		nuevo->sgte=NULL;
		if(primero==NULL){
			printf("\n         Primer Dato es %d ",x);
			primero = nuevo;
			ultimo = nuevo;
		}
		else{
			ultimo->sgte = nuevo;
			ultimo=nuevo;
		}
//	}
	/*
	if(nuevo->sgte==NULL)
		printf("\n         Ultimo Dato es %d ",x);*/
		//Quiero que solo me muestre EL ULTIMO dato ingresado, en este caso es 10.
}
 
void mostrar_lista(){
	struct lista *aux;
	int i = 1;
	aux=primero;
	printf("\n     Mostrando Datos de la Lista: ");
	while(aux!=NULL){
		printf("\n El dato %d es: %d ",i,aux->numero);
		aux = aux->sgte;
		i++;
	}
	if(i==1)
		printf("\n\t La lista esta vacia...");
}
 
void sort_lista(){
	struct lista *i,*j;
	int temp;
	for(i=primero;i->sgte!=NULL;i=i->sgte){
		for(j=i->sgte;j!=NULL;j=j->sgte){
			if(i->numero < j->numero){ // "< de Mayor a menor" y "> de menor a mayor"
				temp = i->numero;
				i->numero=j->numero;
				j->numero=temp;
 
			}
		}
	}
	printf("\n   --------------La lista de datos a sido Ordenada.--------------");
}
 
void buscar_lista(int x){
	struct lista *aux, *aux2;
	int ok = 0;
	aux=primero;
	while(aux!=NULL && !ok){
    	if(aux->numero==x){
        ok = 1;
	    }
		else{
	        aux=aux->sgte;
		}
	}
	if(ok){/*
		while(aux->numero==x){
	    printf("\n\n Numero %d esta en la lista", x);
	    aux = aux->sgte;*/
	    for(aux2=primero;aux2->sgte!=NULL;aux2=aux2->sgte){
	    	if(aux2->numero==x)
	    		printf("\n\n Numero %d esta en la lista", x);
		}
	}
	else
	    printf("\n\n El numero %d no esta en la lista", x);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 60
Ha aumentado su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda con un problema en el codigo de listas enlazadas

Publicado por Patricio (25 intervenciones) el 15/04/2019 01:41:52
Ya resolvi el problema, muchas gracias
El codigo de buscar es:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void buscar_lista(int x){
	struct lista *aux, *aux2;
	int ok = 0;
	aux=primero;
	while(aux!=NULL && !ok){
    	if(aux->numero==x){
        ok = 1;
	    }
		else{
	        aux=aux->sgte;
		}
	}
	if(ok){
		while(aux!=NULL){
			if(aux->numero==x){
				printf("\n\n Numero %d esta en la lista", x);
			}
	    	aux = aux->sgte;
	    //for(aux2=primero;aux2->sgte!=NULL;aux2=aux2->sgte){
	    //	if(aux2->numero==x)
	    //		printf("\n\n Numero %d esta en la lista", x);
		}
	}
	else
	    printf("\n\n El numero %d no esta en la lista", x);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar