Autor
|
Tema: funciones con listas (Leído 1,089 veces)
|
mapers
Desconectado
Mensajes: 503
|
holas de nuevo gente del foro esta ves tengo una ´pequeña duda ........ tengo un menu con opciones para listas ......me compila bien pero cuando quiero buscar un elemnto en la lista no me da siempre se me cierra la ventana a que se deve #include<cstdlib> #include<iostream> using namespace std; struct nodo{ int nro; struct nodo *sgte; }; typedef struct nodo *Tlista; void insertaralinicio(Tlista &,int ); void insertaralfinal(Tlista &,int ); void imprimir(Tlista); void buscarelemento(Tlista &,int ); int main () {Tlista lista=NULL; int opc,valor,pos; do { cout<<"***MENU xD***"<<endl; cout<<"1. insertar al inicio"<<endl; cout<<"2. insertar al final"<<endl; cout<<"3. listado"<<endl; cout<<"4. buscar numero"<<endl; cout<<"5. salir"<<endl; cout<<"ingrese opcion :"; cin>>opc; switch(opc){ case 1:cout<<"el valor insertar al inicio :"; cin>>valor; insertaralinicio(lista,valor); break; case 2:cout<<"el valor insertar al final :"; cin>>valor; insertaralfinal(lista,valor); break; case 3:cout<<endl<<"listado"<<endl; imprimir(lista); break; case 4:cout<<endl<<"ingrese valor a evaluar"<<endl; cin>>valor; buscarelemento(lista,valor); } }while(opc!=4); } void insertaralfinal(Tlista &lista,int valor) { Tlista t,q; q=new(struct nodo); q->nro=valor; q->sgte=NULL; if(lista==NULL) lista=q; else {t=lista; while(t->sgte!=NULL) t=t->sgte; t->sgte=q;} } void insertaralinicio(Tlista &lista,int valor) { Tlista L; L=new(struct nodo); L->nro=valor; L->sgte=lista; lista=L; } void imprimir(Tlista lista) { while(lista!=NULL) { cout<<lista->nro<<endl; lista=lista->sgte; } cout<<endl; } void buscarelemento(Tlista &lista,int valor) { int c=0; while(lista!=NULL) { if(lista->nro==valor) { lista=lista->sgte; c++; } } cout<<"el elemento se encontro en la posicion"<<c<<endl; }
|
|
|
|
|
En línea
|
|
|
|
.:BlackCoder:.
Desconectado
Mensajes: 388
Cada dia C++!!
|
No lo lei todo ... pero creo que esto no es lo que quisiste hacer: }while(opc!=4); Si no un 5... Pruebalo a ver... y luego postea si no te da... y ahi si me lo leo to 
|
|
|
|
|
En línea
|
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja  
|
|
|
Littlehorse
All the world's a stage
Moderador
 
Desconectado
Mensajes: 2.707
Nie Dam Sie
|
No, el problema probablemente este acá: void buscarelemento(Tlista &lista,int valor) { int c=0; while(lista!=NULL) { if(lista->nro==valor) { lista=lista->sgte; c++; } } cout<<"el elemento se encontro en la posicion"<<c<<endl; } Solamente te moves al siguiente nodo si el elemento es igual al numero del nodo actual. El problema es que en determinados casos tendrás un ciclo infinito. Modifica esa función para que se mueva de nodo en nodo solo si el numero no se ha encontrado, y en el caso de encontrarlo, imprime su posición y retorna al main. Edit: Igual lo que te puso El_nuevo_HH también tenes que arreglarlo, ya que de otro modo la opción "Salir" no funcionaria. Saludos!
|
|
|
|
« Última modificación: 20 Marzo 2010, 05:26 por Littlehorse »
|
En línea
|
 @NeedOfSecurityAn expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
.:BlackCoder:.
Desconectado
Mensajes: 388
Cada dia C++!!
|
jeje... menos mal que editaste, me hiciste dudar PD: Esa creadera de datos tipo Tlist, y los ->sgte me dejaron mareado  pero ya veo que es comun hacer cosas asi...
|
|
|
|
|
En línea
|
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja  
|
|
|
mapers
Desconectado
Mensajes: 503
|
y como podria hacer una funcion que e mueva de nodo a nodo dime una pista numas p´s..... un ejemplito
|
|
|
|
|
En línea
|
|
|
|
Littlehorse
All the world's a stage
Moderador
 
Desconectado
Mensajes: 2.707
Nie Dam Sie
|
jeje... menos mal que editaste, me hiciste dudar PD: Esa creadera de datos tipo Tlist, y los ->sgte me dejaron mareado  pero ya veo que es comun hacer cosas asi... Edite porque lo tuyo también lo tiene que corregir, lo que pasa que no era a lo que el se refería específicamente. Pero si, tiene que corregir ambas cosas porque son dos ciclos infinitos y eso es mucho para un solo programa.  En cuanto a las listas, son bastante sencillas, es cuestión de practicar con ellas. y como podria hacer una funcion que e mueva de nodo a nodo dime una pista numas p´s..... un ejemplito
Mas pista de lo que ya dije? bueno a ver, algo así tal vez: while(lista!=NULL) { if(lista->nro==valor) { cout<<"el elemento se encontro en la posicion"<<c<<endl; return; } else { c++; lista=lista->sgt; } } O puedes hacer una función que devuelva valores en caso de encontrar o no encontrar el elemento y pasar un contador por referencia para imprimir desde main. Hay mil opciones para elaborar dicha función, pero lo tenes que hacer vos! Saludos!
|
|
|
|
|
En línea
|
 @NeedOfSecurityAn expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
mapers
Desconectado
Mensajes: 503
|
oks men gracias por tu ayuda ahora si complete mi programilla ya se que te referias con hacer a que recorra toda la lista nodo por nodo.... #include<cstdlib> #include<iostream> using namespace std; struct nodo{ int nro; struct nodo *sgte; }; typedef struct nodo *Tlista; void insertaralinicio(Tlista &,int ); void insertaralfinal(Tlista &,int ); void imprimir(Tlista); void buscarelemento(Tlista &,int ); int main () {Tlista lista=NULL; int opc,valor,pos; do { cout<<"***MENU xD***"<<endl; cout<<"1. insertar al inicio"<<endl; cout<<"2. insertar al final"<<endl; cout<<"3. listado"<<endl; cout<<"4. buscar numero"<<endl; cout<<"5. salir"<<endl; cout<<"ingrese opcion :"; cin>>opc; switch(opc){ case 1:cout<<"el valor insertar al inicio :"; cin>>valor; insertaralinicio(lista,valor); break; case 2:cout<<"el valor insertar al final :"; cin>>valor; insertaralfinal(lista,valor); break; case 3:cout<<endl<<"listado"<<endl; imprimir(lista); break; case 4:cout<<endl<<"ingrese valor a evaluar"<<endl; cin>>valor; buscarelemento(lista,valor); } }while(opc!=5); } void insertaralfinal(Tlista &lista,int valor) { Tlista t,q; q=new(struct nodo); q->nro=valor; q->sgte=NULL; if(lista==NULL) lista=q; else {t=lista; while(t->sgte!=NULL) t=t->sgte; t->sgte=q;} } void insertaralinicio(Tlista &lista,int valor) { Tlista L; L=new(struct nodo); L->nro=valor; L->sgte=lista; lista=L; } void imprimir(Tlista lista) { while(lista!=NULL) { cout<<lista->nro<<endl; lista=lista->sgte; } cout<<endl; } void buscarelemento(Tlista &lista,int valor) { int c=0; while(lista!=NULL) { if(lista->nro==valor) { cout<<"el elemento se encontro en la posicion"<<c<<endl; return; } else { c++; lista=lista->sgte; } } }
|
|
|
|
|
En línea
|
|
|
|
|
|
mapers
Desconectado
Mensajes: 503
|
ahora agrege la funcion eliminar elemento pero siempre me elimina el elemento del comienzo......lo grafique bien no se que pasara a ver hay les dejo.... #include<cstdlib> #include<iostream> using namespace std; struct nodo{ int nro; struct nodo *sgte; }; typedef struct nodo *Tlista; void insertaralinicio(Tlista &,int ); void insertaralfinal(Tlista &,int ); void imprimir(Tlista); void buscarelemento(Tlista &,int ); void eliminarelemento(Tlista &,int); int main () {Tlista lista=NULL; int opc,valor,pos; do { cout<<"***MENU xD***"<<endl; cout<<"1. insertar al inicio"<<endl; cout<<"2. insertar al final"<<endl; cout<<"3. listado"<<endl; cout<<"4. buscar numero"<<endl; cout<<"5. eliminar numero"<<endl; cout<<"6. salir"<<endl; cout<<"ingrese opcion :"; cin>>opc; switch(opc){ case 1:cout<<"el valor insertar al inicio :"; cin>>valor; insertaralinicio(lista,valor); break; case 2:cout<<"el valor insertar al final :"; cin>>valor; insertaralfinal(lista,valor); break; case 3:cout<<endl<<"listado"<<endl; imprimir(lista); break; case 4:cout<<endl<<"ingrese valor a evaluar"<<endl; cin>>valor; buscarelemento(lista,valor); cout<<endl; break; case 5:cout<<endl<<"ingrese valor a eliminarr"<<endl; cin>>valor; eliminarelemento(lista,valor); cout<<endl; break; } }while(opc!=6); } void insertaralfinal(Tlista &lista,int valor) { Tlista t,q; q=new(struct nodo); q->nro=valor; q->sgte=NULL; if(lista==NULL) lista=q; else {t=lista; while(t->sgte!=NULL) t=t->sgte; t->sgte=q;} } void insertaralinicio(Tlista &lista,int valor) { Tlista L; L=new(struct nodo); L->nro=valor; L->sgte=lista; lista=L; } void imprimir(Tlista lista) { while(lista!=NULL) { cout<<lista->nro<<endl; lista=lista->sgte; } cout<<endl; } void buscarelemento(Tlista &lista,int valor) { int c=0; while(lista!=NULL) { if(lista->nro==valor) { cout<<"el elemento se encontro en la posicion"<<c<<endl; return; } else { c++; lista=lista->sgte; } } cout<<endl; cout<<"el numero no se encontro"<<endl; } void eliminarelemento(Tlista &lista,int valor) { Tlista p,ant; p=lista; while(p!=NULL) { if(p->nro=valor) { if(p=lista) lista=lista->sgte; else ant->sgte=p->sgte; delete(p); return; } ant=p; p=p->sgte; } }
|
|
|
|
|
En línea
|
|
|
|
|
|
mapers
Desconectado
Mensajes: 503
|
tenias razon men hay staba el problema......... #include<cstdlib> #include<iostream> using namespace std; struct nodo{ int nro; struct nodo *sgte; }; typedef struct nodo *Tlista; void insertaralinicio(Tlista &,int ); void insertaralfinal(Tlista &,int ); void imprimir(Tlista); void buscarelemento(Tlista &,int ); void eliminarelemento(Tlista &,int); int main () {Tlista lista=NULL; int opc,valor,pos; do { cout<<"***MENU xD***"<<endl; cout<<"1. insertar al inicio"<<endl; cout<<"2. insertar al final"<<endl; cout<<"3. listado"<<endl; cout<<"4. buscar numero"<<endl; cout<<"5. eliminar numero"<<endl; cout<<"6. salir"<<endl; cout<<"ingrese opcion :"; cin>>opc; switch(opc){ case 1:cout<<"el valor insertar al inicio :"; cin>>valor; insertaralinicio(lista,valor); break; case 2:cout<<"el valor insertar al final :"; cin>>valor; insertaralfinal(lista,valor); break; case 3:cout<<endl<<"listado"<<endl; imprimir(lista); break; case 4:cout<<endl<<"ingrese valor a evaluar"<<endl; cin>>valor; buscarelemento(lista,valor); cout<<endl; break; case 5:cout<<endl<<"ingrese valor a eliminar"<<endl; cin>>valor; eliminarelemento(lista,valor); cout<<endl; break; } }while(opc!=6); } void insertaralfinal(Tlista &lista,int valor) { Tlista t,q; q=new(struct nodo); q->nro=valor; q->sgte=NULL; if(lista==NULL) lista=q; else {t=lista; while(t->sgte!=NULL) t=t->sgte; t->sgte=q;} } void insertaralinicio(Tlista &lista,int valor) { Tlista L; L=new(struct nodo); L->nro=valor; L->sgte=lista; lista=L; } void imprimir(Tlista lista) { while(lista!=NULL) { cout<<lista->nro<<endl; lista=lista->sgte; } cout<<endl; } void buscarelemento(Tlista &lista,int valor) { int c=0; while(lista!=NULL) { if(lista->nro==valor) { cout<<"el elemento se encontro en la posicion"<<c<<endl; return; } else { c++; lista=lista->sgte; } } cout<<endl; cout<<"el numero no se encontro"<<endl; } void eliminarelemento(Tlista &lista,int valor) { Tlista p,ant; p=lista; while(p!=NULL) { if(p->nro==valor) { if(p==lista) lista=lista->sgte; else ant->sgte=p->sgte; delete(p); return; } ant=p; p=p->sgte; } }
|
|
|
|
|
En línea
|
|
|
|
mapers
Desconectado
Mensajes: 503
|
weno muxas gracias por su ayuda tema cerrado
|
|
|
|
« Última modificación: 22 Abril 2010, 06:34 por mapers »
|
En línea
|
|
|
|
|
|