Listes chainées bidirectionnelles (creation dynamique)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 845 fois - Téléchargée 36 fois

Contenu du snippet

CE CODE PERMET DE MANIPULER N-LISTES BIDIRECTIONNELLES D'ENTIERS ,CREATION DYNAMIQUE ,CONCATENANTION, SUPPRESSION, TRI CROISSANT DE TOUTES LES LISTES,ET LISTE INVERSE CONCATENEE!!!!!!!
TOUT CELA IMPRIME DANS UN FICHIER INDEPENDANT!!!!!!

Source / Exemple :


#include<iostream.h>
#include<dos.h>
#include<stdio.h>
#include<malloc.h>
#include<fstream.h>
#include<conio.h>

		struct time t;
		struct date d;
		struct element
			{int info;
			 element* precedent;
			 element* suivant;
			};
 void insertfin(element* &,int );
 void affiche(element*);
 void tri(element* &);
 void sdup(element* &);
 void concate(element* &,element* );
 void inverse(element* &,element* );
 ofstream f("c:\exemple1.txt",ios::out);

void  main()

	{
			FILE * nouveau;
			int * tab;
			int i,j,k,valeur,numlist;
			element* chaine1=0;
			element*chaine2 =0;
			element**tablist;
			int c;
			for (i=1;i<40;i++)
			{	 gotoxy(i,5);
				 cout<<"bonjour";
				 clrscr();
			}

				gotoxy(i,5);
				cout<<"bonjour";
			nouveau=fopen("example1.txt","r");	//ouverture fichier

			getdate(&d);
			printf("\ndate du jour: %d/%d/%d\t",d.da_day,d.da_mon,d.da_year);

			gettime(&t);
			printf("\nheure d'excution du programme: %2d:%02d:%02d.%02d\n",
						t.ti_hour,t.ti_min,t.ti_sec,t.ti_hund);
			cout<<"Donner le nombre de listes que vous voulez créer :  \t" ;
			f<<"Donner le nombre de listes que vous voulez créer :  \t" ;
			cin>>numlist;
			tablist=new  element*[numlist];

			for (i=0;i<numlist;i++)
				tablist[i]=0;
			for (i=0;i<numlist;i++)
				{cout<<"Donner les valeurs de la liste"<<(i+1)<<" :\t";
					f<<"Donner les valeurs de la liste"<<(i+1)<<" :\t";
				 cin>>k;
				 for (j=1;j<=k;j++)
					{	cin>>valeur;
						insertfin(tablist[i],valeur);
					}//fin de forj
			  }//fin de fori

			for (i=0;i<numlist;i++)
				{	cout<<"\nListe"<<(i+1)<<":\t";
						f<<"\nListe"<<(i+1)<<":\t";
					affiche (tablist[i]);
				}//fin de l'affichage

			for (i=0;i<numlist;i++)
				{
					tri(tablist[i]);
				}//fin du tri

			for (i=0;i<numlist;i++)
				{
					cout<<"\nListe"<<(i+1)<<"triée:\t";
						f<<"\nListe"<<(i+1)<<"triée:\t";
					affiche(tablist[i]);
				 }//fin de l'affichage des listes triées

			for (i=0;i<numlist;i++)
				{
					concate(chaine1,tablist[i]);
					tri(chaine1);
					sdup(chaine1);
				}//fin de la concatenation des listes triée)

					//tri(liste);
					//sdup(liste);
					cout<<"\nListe concaténée:\t";
					f<<"\nListe concaténée:\t";
					affiche(chaine1);
					cout<<"\nListe inversée:\t";
						f<<"\nListe inversée:\t";
					inverse(chaine2,chaine1);
					affiche(chaine2);
		}//FIN DU PROGRAMME

	void insertfin(element* &debut,int valeur)
		{	element* courant;
			if (debut==0)
			{	debut=new element;
				debut->info=valeur;
				debut->suivant=0;
				debut->precedent=0;
			}
			else
				{	courant=debut;
				while (courant->suivant != 0)
					{	courant=courant->suivant;}
						courant->suivant=new element;
						courant->suivant->info=valeur;
						courant->suivant->suivant=0;
						courant->suivant->precedent=courant;
					}
		}
	void affiche(element* debut)
		{	element* courant;
			if(debut==0) cout<<" vide";
			else
			{
				courant=debut;
				while(courant!=0)
					{ cout<<courant->info;
					  courant=courant->suivant;
					}
			}

		}
	void tri(element* &debut)//fonction qui fait le tri croissant de liste
		{	element* Courant1;element* Courant2;int nouveau;
			Courant1=debut;
			if (Courant1==0)cout<<"liste vide" ;
			else
			{Courant2=Courant1->suivant;
				while (Courant1->suivant != 0)
						{
						  while (Courant2 != 0 )
							{if ((Courant2->info) <(Courant1->info))
								{nouveau=Courant1->info;
								 Courant1->info=Courant2->info;
								 Courant2->info=nouveau;
								 }
								 Courant2=Courant2->suivant;
							}
							Courant1=Courant1->suivant;
							if (Courant1->suivant != 0) Courant2=Courant1->suivant;
						}
			}
		}

	void concate(element* &debut3,element* debut)
		{	element* courant;
			courant=debut;
			while(courant!=0)
				{	insertfin(debut3,courant->info);
					courant=courant->suivant;
				}
		}
  void sdup(element* &debut)//fonction qui supprime les elements dupliqué
		{	element* courant;
			element* nouveau;
			courant=debut;
			if (courant !=0)
				{
				while (courant->suivant !=0)
					{if (courant->info == courant->suivant->info)
						{nouveau=courant->suivant;
						 courant->suivant=courant->suivant->suivant;
						if (nouveau->suivant != 0)
							{nouveau->suivant->precedent=courant;}

						nouveau->suivant=0;
						nouveau->precedent=0;
						delete nouveau;
						nouveau=0;
						}
					courant=courant->suivant;
					}

				}
		}
  void inverse(element* &debut3,element* debut)
		{	element* courant;
			courant=debut;
			if (courant !=0)
				{while (courant->suivant != 0)
					{courant=courant->suivant;}
				}
			while (courant != 0)
				{insertfin(debut3,courant->info);
				courant=courant->precedent;
				}
		}

Conclusion :


En espérant que ce code vous aidera dans vos recherches

A voir également

Ajouter un commentaire Commentaires
PrinceDamon Messages postés 1 Date d'inscription mardi 2 avril 2013 Statut Membre Dernière intervention 2 avril 2013
2 avril 2013 à 13:36
merci pour le code,mais j'arrive pas à savoir quel type de tri vous avez utilisé??
dadoukoko Messages postés 1 Date d'inscription samedi 26 janvier 2013 Statut Membre Dernière intervention 28 janvier 2013
28 janv. 2013 à 16:52
la fonction inverse elle permet d'inverser tous les éléments de la liste ???!!
SilenceEssence Messages postés 4 Date d'inscription lundi 19 décembre 2011 Statut Membre Dernière intervention 6 mars 2012
26 déc. 2011 à 12:27
merci beaucoups... mais comment je peux ecrire une fonction de constuction d'une liste bidirectionnelle?? et merci.
SilenceEssence Messages postés 4 Date d'inscription lundi 19 décembre 2011 Statut Membre Dernière intervention 6 mars 2012
26 déc. 2011 à 12:27
merci beaucoups... mais comment je peux ecrire une fonction de constuction d'une liste bidirectionnelle?? et merci.
noiYo Messages postés 1 Date d'inscription dimanche 9 décembre 2007 Statut Membre Dernière intervention 10 août 2008
10 août 2008 à 11:36
Merci pour ton code et ta proc de tri !
Afficher les 8 commentaires

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.