elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
14 Febrero 2012, 04:44  

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  funciones con listas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: funciones con listas  (Leído 1,089 veces)
mapers


Desconectado Desconectado

Mensajes: 503


Ver Perfil
funciones con listas
« en: 20 Marzo 2010, 04:37 »

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

Código
#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 Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Re: funciones con listas
« Respuesta #1 en: 20 Marzo 2010, 05:04 »

No lo lei todo ... pero creo que esto no es lo que quisiste hacer:
Código
}while(opc!=4);
Si no un 5... Pruebalo a ver... y luego postea si no te da... y ahi si me lo leo to  :xD


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 Desconectado

Mensajes: 2.707


Nie Dam Sie


Ver Perfil WWW
Re: funciones con listas
« Respuesta #2 en: 20 Marzo 2010, 05:19 »

No, el problema probablemente este acá:

Código
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


@NeedOfSecurity

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Re: funciones con listas
« Respuesta #3 en: 20 Marzo 2010, 05:35 »

jeje... menos mal que editaste, me hiciste dudar  :P
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 Desconectado

Mensajes: 503


Ver Perfil
Re: funciones con listas
« Respuesta #4 en: 20 Marzo 2010, 05:41 »

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 Desconectado

Mensajes: 2.707


Nie Dam Sie


Ver Perfil WWW
Re: funciones con listas
« Respuesta #5 en: 20 Marzo 2010, 05:48 »

jeje... menos mal que editaste, me hiciste dudar  :P
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.  ;D

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:

Código
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


@NeedOfSecurity

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
mapers


Desconectado Desconectado

Mensajes: 503


Ver Perfil
Re: funciones con listas
« Respuesta #6 en: 20 Marzo 2010, 06:07 »

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....
Código
#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
Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.707


Nie Dam Sie


Ver Perfil WWW
Re: funciones con listas
« Respuesta #7 en: 20 Marzo 2010, 06:11 »

De nada!  :)
En línea


@NeedOfSecurity

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
mapers


Desconectado Desconectado

Mensajes: 503


Ver Perfil
Re: funciones con listas
« Respuesta #8 en: 20 Marzo 2010, 06:19 »

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....
Código
#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
Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.707


Nie Dam Sie


Ver Perfil WWW
Re: funciones con listas
« Respuesta #9 en: 20 Marzo 2010, 06:22 »

A simple vista estas haciendo condicionales (if) pero en las condiciones estas poniendo asignaciones (=).
p=lista; asignación
p==lista; comparación.

Revisa por ese lado a ver si lo solucionas.

Saludos
En línea


@NeedOfSecurity

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
mapers


Desconectado Desconectado

Mensajes: 503


Ver Perfil
Re: funciones con listas
« Respuesta #10 en: 20 Marzo 2010, 06:25 »

tenias razon men  hay staba el problema.........
Código
 
#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 Desconectado

Mensajes: 503


Ver Perfil
Re: funciones con listas
« Respuesta #11 en: 22 Abril 2010, 03:58 »

weno muxas gracias por su ayuda tema cerrado
« Última modificación: 22 Abril 2010, 06:34 por mapers » En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines