Ir al contenido

publicidad

Foto

Elementos repetidos de una lista enlazadas- EN C++


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
2 respuestas en este tema

  • Edutrul

  • Humano

  • vida restante: 100%
  • Registrado: 16 jun 2009
  • Mensajes: 1
#1

Escrito 16 junio 2009 - 01:53

Hola gente como estan ?

tengo una duda pueden ayudarme con mi ejercisio?
necesito eliminar las ocurrencias de una lista enlazada
x ejemplo
4 2 2 2 2 4 8 8 7

que salga
4 2 8 7

Estare con muchas ansias respuestas aqui el avance que hice

[code:1]#include
#include
#include
#include

struct nodo
{
int dato;
struct nodo * sgte;
};

typedef struct nodo * TLista;

void ingresar(TLista &lista,int valor);
void eliminarOcurrencias( TLista &lista);
void eliminarRepetidos( TLista &lista);
void verLista( TLista lista);



using namespace std;
int main(int argc, char *argv[])
{
int opc,n,valor;
TLista lista;
lista = NULL; //inicializacion !

do
{
cout<<" Ejercisio Numero 02: eliminar Repetidos "< cout<<" 1 Ingresar Datos rand "< cout<<" 2 Eliminar Repetidos "< cout<<" 3 Ver lista enlazada "< cout<<" 4 Salir "< cout< cout<<"Ingrese opcion : ";cin>>opc;

switch(opc)
{
case 1: cout<<"cuantos elementos a ingresar :";cin>>n;
for(int i=0; i {
valor=rand()%3;
ingresar(lista,valor);
}
break;

case 2: cout<<"Eliminando Repetidos...";
eliminarRepetidos(lista);
break;

case 3: verLista(lista);
cout<<"Presione una tecla para continuar : ";
getch();
break;
case 5: cout<<"cuantos elementos a ingresar :";cin>>n;
for(int i=0; i {
cin>>valor;
ingresar(lista,valor);
}

break;

}
system("cls");
}while(opc != 4);



system("PAUSE");
return EXIT_SUCCESS;
}


void ingresar(TLista &lista,int valor)
{
TLista q;

q=new(struct nodo);
q->dato=valor;
q->sgte=lista;
lista=q;

}



void eliminarRepetidos( TLista &lista)
{

TLista q,p,r,ant,borrame;
int num;
int numero;
int repetidos=0;

q=lista;
while( q != NULL)
{
num=q->dato;
ant = q;
p = q;
p=p->sgte;
while(p != NULL )
{

if(num == p->dato )
{
r=p;
while(num == r->dato && r != NULL)
{ r=r->sgte; }
ant->sgte = r;
if(r == NULL)
cout<<"r es NULL"< while(num == p->dato && p != NULL)
{
borrame = p;
p=p->sgte;
delete(borrame);
repetidos=1;
}//fin while
}//fin if
else
{
ant=p;
p=p->sgte;
}

}
if(!repetidos)
q=q->sgte;
repetidos=0;
cout<dato; getch();
}


}



void verLista( TLista lista)
{
while(lista != NULL )
{
cout<< lista->dato < lista = lista->sgte;
}
}

[/code]

  • Vilshofen

  • Lord Boros

  • vida restante: 100%
  • Registrado: 18 jul 2003
  • Mensajes: 3.898
#2

Escrito 16 junio 2009 - 09:30

Madre del amor hermoso!! La que has preparado en poco rato en la rutina EliminarRepetidos... Es mucho más sencillo usar una lista auxiliar. Coges un número, mira si está en la lista auxiliar, si no está lo insertas y si está continuas leyendo la lista hasta el final. En caso de que hayas insertado, debes comenzar el bucle de nuevo y si has finalizado la lectura de la lista y no has insertado nada en la lista auxiliar, finalizas la rutina.

Así a ojo.

#3

Escrito 16 junio 2009 - 16:49

http://zonaforo.meri...c.php?t=1345939

Lee la norma 3 ;)

Este es el hilo donde debes postear esto. Asi reunimos en un solo hilo todas las dudas de c++ y va mejor tanto para ti por si salen otras dudas y para otros que vengan con la misma duda ;)
http://zonaforo.meri...c.php?t=1209892

Un saludo y cierro esto.


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
publicidad