Buenas estoy haciendo una lista doblemente encadenada; entiendo su funcionamiento pero no acabo de poder plasmarlo en el codigo. Haber si me podeis aconsegar de como hacerlo.
Gracias!!.
ESTRUCTURA:
METODOS:
Gracias!!.
Código (cpp) [Seleccionar]
struct Node {
int dada;
Node *seguent;
Node *anterior;
};
Node *a_inici;
Código (cpp) [Seleccionar]
EstDinDE::EstDinDE()
{
a_inici=NULL;
}
void EstDinDE::afegirInici(int e)
{
Node *p;
p=new Node();
p->dada=e;
p->seguent=a_inici;
p->anterior=NULL;
//a_inici->anterior=p;
a_inici=p;
}
void EstDinDE::afegirFinal(int e)
{
Node *p,*aux;
p=new Node();
aux=new Node();
bool inserit=false;
if(a_inici==NULL){
p->dada=e;
p->seguent=a_inici;
p->anterior=NULL;
a_inici=p;
}
else {
p=a_inici;
p=p->seguent;
aux=a_inici;
while(!inserit){
if(p!=NULL){
p=p->seguent;
aux=aux->seguent;
}
else{
Node *nou;
nou=new Node();
nou->dada=e;
nou->seguent=NULL;
nou->anterior=aux->seguent;
p->seguent=nou;
inserit=true;
}
}
}
}
void EstDinDE::esborrar(int e)
{
Node *p;
p=new Node();
bool trobat=false;
trobat=existeix(e);
if((p!=NULL)&&trobat)
{
if(p==a_inici)
{
a_inici=p->seguent;
if(p->seguent != NULL)
p->seguent->anterior =NULL;
}
else if (p->seguent!= NULL)
{
p->anterior->seguent=p->seguent;
p->seguent->anterior=p->anterior;
}
else {
p->anterior->seguent=NULL;
}
delete p;
}
}
bool EstDinDE::existeix(int e)
{
Node *p;
bool trobat=false;
p=a_inici;
while((p!=NULL)&&(!trobat))
{
if (p->dada==e) trobat=true;
p=p->seguent;
}
return(trobat);
}
void EstDinDE::llistar()
{
Node *p;
p=a_inici;
while(p->anterior) p=p->anterior;
while(p) {
cout << p->dada <<endl;
p=p->seguent;
}
}