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
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.