On va remettre l'élements dans une cha?ne, touts les numéros positifs sont dans le première cha?ne et touts les numéros négatifs sont dans la deuxième cha?ne.?
?
#include <iostream>
using namespace std;
#define N 5
typedef struct cellule
{
int valeur;
struct cellule* pointeur;
}Tcellule;
Tcellule* recherchePrecedant(Tcellule* T, int v);
Tcellule* suppremerTcellule(Tcellule* T, int v);
void positifNegativf(Tcellule** adt1, Tcellule** adt2);
int main()
{
Tcellule* T1;
Tcellule e={5,NULL};
Tcellule d={4,&e};
Tcellule c={3,&d};
Tcellule b={2,&c};
Tcellule a={1,&b};
T1=&a;
Tcellule* T2=NULL;
Tcellule** adT1=&T1;
Tcellule** adT2=&T2;
positifNegativf(adT1,adT2);
Tcellule* p1=*adT1;
Tcellule* p2=*adT2;
while(p1!=NULL)
{
cout<<"P1:"<<p1->valeur<<"\n";
p1=p1->pointeur;
}
while(p2!=NULL)
{
cout<<"P2:"<<p2->valeur<<"\n";
p2=p2->pointeur;
}
/*
Tcellule* p=suppremerTcellule(T, 1);
while(p!=NULL)
{
cout<<p->valeur<<"\n";
p=p->pointeur;
}
*/
return 0;
}
Tcellule* recherchePrecedant(Tcellule* T, int v)
{
Tcellule* p=T;
Tcellule* precp=NULL;
while(p!=NULL&&p->valeur<v)
{
precp=p;
p=p->pointeur;
}
return precp;
}
Tcellule* suppremerTcellule(Tcellule* T, int v)
{
Tcellule* precp = recherchePrecedant(T, v);
if(precp==NULL)
{
if(T->valeur==v)
T=T->pointeur;
}
else
{
if(precp->pointeur->valeur==v)
precp->pointeur=precp->pointeur->pointeur;
}
return T;
}
void positifNegativf(Tcellule** adt1, Tcellule** adt2)
{
Tcellule* t1=*adt1;
Tcellule* t2=*adt2;
Tcellule* p=t1;
Tcellule* prec=p;
while(p!=NULL)
{
if(t1->valeur<0)
{
p=t1->pointeur;
t1->pointeur=t2;
t2=t1;
t1=p;
prec=t1;
}
else
{
if(p->valeur>=0)
{
prec=p;
p=p->pointeur;
}
else
{
prec->pointeur=p->pointeur;
p->pointeur=t2;
t2=p;
p=prec->pointeur;
}
}
}
*adt1 = t1;
*adt2 = t2;
}
?