E' la prima volta che posto qualcosa su un forum quindi se ho commesso degli errori chiedo scusa in anticipo.
Mi è richiesto di suddividere una lista in altre due in base agli elementi pari e quelli dispari, strutture dati richieste : Lista concatenata con record e puntatori.
Quando eseguo il codice non ci sono errori (mi dice soltanto che l1 e l2 vengono utilizzate ma non dichiarate) tuttavia mi stampa solamente la lista di partenza.
Posto di seguente il codice:
#include <iostream>
#include <cstdlib>
using namespace std;
struct elemento
{
int valore;
elemento* succ;
};
typedef elemento* pelem;
pelem CreaLista();
void SuddividiLista(pelem p,pelem p1,pelem p2);
void StampaLista(pelem p);
int main()
{
cout<<"Programma che suddivide lista in due liste per posizione pari e posizione dispari degli elementi."<<endl;
pelem l=CreaLista();
StampaLista(l);
pelem l1,l2;
SuddividiLista(l,l1,l2);
cout<<"La lista dei pari e':"<<endl;
StampaLista(l1);
cout<<"La lista dei dispari e':"<<endl;
StampaLista(l2);
system("PAUSE");
return 0;
}
pelem CreaLista()
{
int n;
pelem p=new elemento;
cout<<"numero elementi lista";
cin>>n;
cout<<"valore "<<1<<" = ";
cin>>p->valore;
pelem p1=p;
for (int i=1;i<n;i++)
{
p1->succ=new elemento;
p1=p1->succ;
cout<<"valore "<<i+1<<" = ";
cin>>p1->valore;
}
p1->succ=NULL;
return p;
}
void StampaLista(pelem p)
{
while (p!=NULL)
{
cout<<p->valore<<" ";
p=p->succ;
}
}
void SuddividiLista(pelem p,pelem p1,pelem p2)
{
pelem paux=p;
pelem pauxd=new elemento;
pauxd->succ=p;
p=pauxd;
pelem pauxp=new elemento;
pauxp->succ=p->succ;
p->succ=pauxp;
p1=NULL;p2=NULL;
int i=0;
while(paux!=NULL)
{
i++;
paux=paux->succ;
}
{
{if (i%2==0)
pauxp=new elemento;
pauxp=pauxp->succ;
pauxp->valore=paux->valore;
paux=paux->succ;
}
{if (i%2==1)
pauxd=new elemento;
pauxd=pauxd->succ;
paux->valore=pauxd->valore;
paux=paux->succ;
}
}
StampaLista(p1);
StampaLista(p2);
}