Programma che dato un valore x, trova i suoi minori in una lista, li memorizza in un array dinamico e li elimina dalla lista!! Non riesco a trovare l'errore, grazie in anticipo!!
#include <iostream>
#include <cstdlib>
using namespace std;
struct elemento
{
int valore;
elemento* succ;
};
typedef elemento* pelem;
void crealista(pelem & p, int n)
{
p=new elemento;
pelem paux=p;
cout<<"Elemento no.0: ";
cin>>paux->valore;
for(int i=1;i<n;i++)
{
paux->succ=new elemento;
paux=paux->succ;
cout<<"Elemento no."<<i<<": ";
cin>>paux->valore;
}
paux->succ=NULL;
}
void canctesta(pelem & p)
{
if(p!=NULL)
{
pelem paux=p;
p=p->succ;
delete paux;
}
}
void canccoda(pelem & p)
{
if(p!=NULL)
{
if(p->succ!=NULL)
{
pelem paux=p;
while(paux->succ->succ!=NULL)
{
paux=paux->succ;
}
delete paux->succ;
paux->succ=NULL;
}
}
}
void sposta(pelem & p, int n, int* & minx, int & c)
{
int x;
cout<<"Inserire il valore soglia: ";
cin>>x;
pelem paux=p;
pelem prec=p;
pelem post=p;
for(int i=0;i<n;i++)
{
if(paux->valore<x)
{
c++;
}
}
minx=new int[c];
for(int j=0;j<n;j++)
{
if(paux->valore<x)
{
minx[j]=paux->valore;
if(j==0)
{
canctesta(p);
}
if(j==n-1)
{
canccoda(p);
}
else
{
while(prec->succ!=paux)
{
prec=prec->succ;
}
post=paux->succ;
delete paux;
prec->succ=post;
pelem paux=post;
}
}
paux=paux->succ;
}
}
void stampalista(pelem & p)
{
if(p!=NULL)
{
cout<<p->valore<<endl;
stampalista(p->succ);
}
}
void stampaarray(int* minx, int c)
{
for(int i=0;i<c;i++)
{
cout<<"Elemento array no."<<i+1<<": "<<minx<<endl;
}
}
int main()
{
pelem inizio;
int* array;
int cmin=0,ne;
cout<<"Inserire il numero di elementi: ";
cin>>ne;
system("CLS");
crealista(inizio,ne);
system("CLS");
sposta(inizio,ne,array,cmin);
stampalista(inizio);
stampaarray(array,cmin);
system("pause");
return 0;
}