Copie d'une liste chainee (ajouter au debut, fin, milieu)

Contenu du snippet

une liste chainee qui utilise les classes pour ajouter un élement au debut à la fin ou au milieu de la iste aprés on procede ala copie de cette liste dans une autre(liste2) puis on la modifie sans que le changement affecte la 1ere liste.

Source / Exemple :


/*fichier list2.h il doit etre enregistre avec ce nom ds le même dossier que le fihier principal sinon proceder au changement */
struct cellule
			{
				int val;
				cellule *suiv;
			};
typedef cellule* liste;

class listechainee
{
private: liste cell;
	
	
public:		 listechainee();
			 void ajouterdebut(int);
			 void affichage() const;
			 void milieu(int rang, int n);
			 void ajouter(int n);
			 listechainee(listechainee &);
			 ~listechainee();    // le destructeur 
	
};

listechainee::listechainee()

{
	
	cell=new cellule;
	cell=NULL;
}
 

void listechainee::ajouterdebut(int n)
{
	liste element;
	element=new cellule;
	element->val=n;
	element->suiv=cell;
	cell=element;
}

void listechainee::affichage() const
{	
	liste p;
	p=cell;
	while(p!=NULL)
	{
        cout<<p->val<<endl;
		p=p->suiv;
	}	
}

//milieu
void listechainee::milieu(int rang, int n)
{
	int i;	
	liste element,temp;
	temp=cell;
	for (i=1;i<rang-1;i++)
	{
		temp=temp->suiv;
		if(temp->suiv==NULL)
			break;
	}
	if(rang<=1) 
		listechainee::ajouterdebut(n);
	else if(temp->suiv==NULL)
			listechainee::ajouter(n);
	else
	{
		    element=new cellule;
			element->val=n;
			element->suiv=temp->suiv;
			temp->suiv=element;
	}
}

//ajouter
void listechainee::ajouter(int n)
{
	liste element,temp;
	element=new cellule;
	element->val=n;
	element->suiv=NULL;
	temp=cell;
	if (temp==NULL)
		 cell=element;
	else
	 {
		while(temp->suiv!=NULL)
		{

			temp=temp->suiv;
		}
		temp->suiv=element;
	 }

}

listechainee::~listechainee()               //implementation du destructeur
{
    if(cell!=NULL)
	{
	   liste  temp,prec;
	   temp=cell;
	   while(temp!=NULL)
	   {
	       prec=temp;
		   temp=temp->suiv;
		   delete prec; 
	   }
	
	}
}

listechainee::listechainee(listechainee & chaine)
{
   liste copie_liste=chaine.cell,temp,element,debut;
   element=new cellule;
   debut=element;
   if(copie_liste==NULL)
   {
	  
	  element=NULL;
	  cell=element;
   }
   else
	   {
			temp=element;
			element->val=copie_liste->val;
			element->suiv=NULL;
			temp->suiv=element;
			copie_liste=copie_liste->suiv;
			while(copie_liste!=NULL)
			{
	 			element=new cellule;			
				element->val=copie_liste->val;
				element->suiv=NULL;
				temp->suiv=element;
				temp=element;
				copie_liste=copie_liste->suiv;
			}
			cell=debut;
	   }
}

/*&&&&&&&&&&&&&*fichier principal&&&&&&&&&&&&&&&&&&&*/
#include<iostream.h>
#include"liste2.h"
void main()
{

	int i=1,r,val;

	listechainee liste1;
	cout<<"saisir la liste1 par des entiers"<<endl;
	while(i!=0)             
	{	
		cout<<"donner une valeur";
		cin>>val;
		liste1.ajouter(val);
		cout<<"taper 0 pour sortir";
		cin>>i;
	}	
	liste1.affichage();
	cout<<"donner le rang de la liste1 ou vous voulez inserer un element";
	cin>>r;
	cout<<"donner une valeur";
	cin>>val;
	liste1.milieu(r,val);
	liste1.affichage();
	cout<<"\\ncopie de la liste 1 dans la liste2"<<endl;
	listechainee liste2=liste1;
	liste2.affichage();
	cout<<"donner le rang de la liste2 ou vous voulez inserer un element";
	cin>>r;
	cout<<"donner une valeur";
	cin>>val;
	liste2.milieu(r,val);
	cout<<"afichage de la liste2"<<endl;
	liste2.affichage();
	cout<<"\\nle changement n'a pas affecter la liste1"<<endl;
	liste1.affichage();
}

Conclusion :


la 1ere liste n'a pas ete change parce que on redefinie liste1=liste2 par la fonction
listechainee::listechainee(listechainee & chaine)
et merci de m'envoyer vos commentaires afin d'ameliorer cette application

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.