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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 872 fois - Téléchargée 27 fois

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

Ajouter un commentaire

Commentaires

walidos09
Messages postés
5
Date d'inscription
dimanche 19 décembre 2004
Statut
Membre
Dernière intervention
24 décembre 2004
-
et pour le tri d'une liste

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.