Positif et Negativf

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;
}

 

你可能感兴趣的:(C++,c,C#)