Basicamente El Programa Debe Hacer Una Lista Circular Con n nombres, y despues eliminarlo hasta que kede solo 1, el problema es que a veces toma como borrado un nodo sin haberlo eliminado (si me hice entender)
/*****************
Librerias
*****************/
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
/*Clase nodo*/
class nodo
{public:
char info[30];
nodo *sig;
nodo *generar_nodo(char a[30])
{nodo *n;
n=new nodo[30];
strcpy(n->info,a);
n->sig=NULL;
return n;}
};
/*Clase lista*/
class lista_circular
{public:
nodo *cab;
int cant;
lista_circular()
{cab=NULL;
cant=0;}
insertar(char a[30]);
extraer(int dato2);
mostrar();
};
/*Inserta en la lista*/
lista_circular::insertar(char a[30])
{char cad[30];
strcpy(cad,a);
nodo *nuevo=nuevo->generar_nodo(a);
if(!cab)
{cab=nuevo;
cab->sig=nuevo;
cant++;}
else{nodo *p;
p=cab;
while(p->sig!=cab)
{p=p->sig;}
p->sig=nuevo;
p=p->sig;
p->sig=cab;
cant++;}
}
/*muestra la lista*/
lista_circular::mostrar()
{nodo *p=cab;
while(p->sig!=cab)
{cout<<p->info<<endl;
p=p->sig;}
cout<<p->info<<endl;}//Cierro Mostrar
/*Extrae de la lista*/
lista_circular::extraer(int dato2)
{if(cab)
{nodo *p,*q;
p=cab;
if(dato2==cant-5)
{while(p->sig!=cab)
{p=p->sig;}
if(cab->sig==cab)
{cab=NULL;
cant--;}
else{cab=cab->sig;
p->sig=cab;
cant--;}
}
else{if(dato2==cant)
{while(p->sig!=cab)
{p=p->sig;}
p->sig=cab;
cant--;}
else{for(int i=0;i<dato2;i++)
{q=p;
p=p->sig;}
q->sig=p->sig;
cant--;
delete p;}}
}else{cout<<" NO EXISTE LISTA\n";}
}
main()
{lista_circular obj;
char nombre[30];
int aux=0;
for(int i=0;i<5;i++)
{cout<<"Digite El Nombre "<<i<<" De La Lista: ";
gets(nombre);
cout<<endl;
obj.insertar(nombre);}
clrscr();
obj.mostrar();
int aux2=obj.cant-1;
for(int i=0;i<aux2;i++)
{clrscr();
randomize();
aux=random(obj.cant)+1;
cout<<"Cantidad De Elementos "<<obj.cant<<endl<<"Se Elimino El Elemento "<<aux<<" De La Lista."<<endl<<"Lista Actual: "<<endl;
obj.extraer(aux);
obj.mostrar();
getch();}
getch();}
varias cosas para decir
primero: por que queres que la lista se borre "aleatoriamente"?..es decir, por que usas randomize() y random() ?
-en una parte declaras "char cad[30]"... esta de mas, no lo usas.
-en la clase nodo pones
nodo *generar_nodo(char a[30])
{
nodo *n;
n=new nodo[30];
strcpy(n->info,a);
n->sig=NULL;
return n;
}
por que pones new nodo[ "30" ] ?
-en que momento liberas memoria? solamente liberas 'p' pero asi no liberas TODO
-hacia falta que uses la conioo? ¬¬
-etaria bueno que pongas mas comentarios, que sea mas legible
y bueno... perdoname si me estoy equivocando!! tal vez le pifie en algo.
despues lo leo mejor :)