Liste chainée

Contenu du snippet

ce code présente une liste chainee trés bien organisée.executée sur Borland C++

Source / Exemple :


#include<iostream>
#include<stdlib.h>
#include<conio.h>

using namespace std;
struct node{ 
int info ;
struct node *suivant ;
} ;

class liste {

	node* tete ;
	node *fin ;

public : 

	liste() { 
             tete=new node ; 
             fin =new node;
             tete->info=0;
             fin->info=0;
             tete->suivant=fin;
             fin->suivant=NULL ;
            }
     
     ~liste(){ 
			 node *p; p=tete;
			 while(p!=fin){
				 node *p1=p;
				 p=p->suivant;
				 delete p1;};
             delete fin;
             }
	
      void insertete(int a){
		  node *p;
		  node *q;
		  p=new node;
		  q=tete->suivant;
		  tete->suivant=p;
          p->suivant=q;		  
          p->info=a;
       }
   	
    void inserfin(int a){
        node *p;
		  node *q;
        node *p1;
		  p=new node;
		  p1=tete;
		  while(p1->suivant!=fin){
		      p1=p1->suivant;
            q=p1;
		      };
          q->suivant=p;
          p->info=a;
          p->suivant=fin;
        } 
    
    int numlist(){
          int i=0;
          node *p;
          p=new node;
          p=tete;
          while(p->suivant!=fin)
             i++;
          return(i);
          }
    
    void inserpos(){
        int i=1,pos,e,err;
        node *p;
		  node *q;
		  node *p1;
        q=new node;
        p=new node;
        p=tete;
        while(p->suivant!=fin)
         {
          i++;
          p=p->suivant;
         };
         do{
          cout<<"\n\ndonner la position < "<<(i+1)<<" et > 0 :   ";
          cin>>pos;
         if(i<pos || pos<=0){
          cout<<"\n\n\tfausse position!\n\n";
          err=1;
          }
         else
          err=0;
         }while(err==1);
         cout<<"\n\ndonner l'entier a ajouter :   ";
         cin>>e;
         p=tete;
         for(int j=0;j<pos;j++){
               p1=p;
               p=p-> suivant;
               }
          q->info=e;
          p1->suivant=q;
          q->suivant=p;
          }
    void afficher(){
        node *p;
        int i=0;
        p=tete;
        while(p->suivant!=fin)
         {
          i++;
          p=p->suivant;
        };
        if(i==0)
         cout<<"\n\n\tliste vide!\n\n";
        else{
          p=tete;
          cout<<"\nposition\tentier\n";
          cout<<"-------------------------\n\n";
          for(int j=0;j<i;j++){
              p=p->suivant;
              cout<<" "<<(j+1)<<"\t  |\t"<<p->info<<"\n";
                }
          cout<<"\n ";
           }
          }
     void suprfin(){
          node *p;
          node *q;
          p=new node;
          p=tete;
          while(p->suivant!=fin){
            q=p;
            p=p->suivant;
            };
          q->suivant=fin;
          delete p;
          }
     
     void suprtete(){
          node *p;
          p=new node;
          p=tete->suivant;
          tete->suivant=p->suivant;
          delete p;
          }
     
     void suprpos(){
          int i=0,pos,err;
          node *p;
          node *q;
          p=new node;
          p=tete;
          while(p->suivant!=fin)
           {
            i++;
            p=p->suivant;
           };
          do{
           cout<<"\n\ndonner la position < "<<(i+1)<<" et > 0 :   ";
           cin>>pos;
          if(i<pos || pos<=0){
           cout<<"\n\n\tfausse position!\n\n";
           err=1;
           }
          else
           err=0;
         }while(err==1);
           p=tete;
           for(int j=0;j<pos;j++){
             q=p;
             p=p-> suivant;
             }
           q->suivant=p->suivant;
           delete(p);
         }
     void suprent(){
          int a;
          node *p;
          node *q;
          int i=0,j=0;
          p=new node;
          node *p1;
          p1=new node;
          p=tete;
          while(p->suivant!=fin)
           {
            i++;
            p=p->suivant;
           };
          if(i==0)
           cout<<"\n\n\tliste vide , aucun element a supprimer!\n\n";
          else{
          cout<<"\n\ndonner l'entier a supprimer :   ";
          cin>>a;
          p=tete;
          p1=tete->suivant;
          while(p->suivant!=fin){
          if(p1->info==a){
           q=p1;
          if(p1->suivant==fin){
           p1=p;
           p->suivant=fin;
           delete(q);
           i++;
          }
          else{
          p1->suivant=p->suivant;
          p1=p->suivant;
          delete(q);
          i++;
          }
         }
         else{
            p=p->suivant;
            p1=p1->suivant;
         }
          };
        }
         if(i==0)
          cout<<"\n\n\tentier ne figurant pas dans la liste!\n\n";
    }
     void trierlist(){
          int i=0,l,m;
          node *p;
          node *q;
          p=new node;
          p=tete;
          while(p->suivant!=fin){
             p=p->suivant;
             i++;
            };
          if(i>1)
           do{
             l=0;
             p=tete->suivant;
             q=p->suivant;
              while(p->suivant!=fin){
              if(p->info > q->info){
                l=1;
                m=p->info;
                p->info=q->info;
                q->info=m;
                }
               q=q->suivant;
               p=p->suivant;
              };
             }while(l==1);
         else;
         }
     
     void detrierlist(){
          int i=0,l,m;
          node *p1;
          node *p;
          node *q;
          node *r;
          p=new node;
          p=tete;
          while(p->suivant!=fin){
             p=p->suivant;
             i++;
            };
          if(i>1)
           do{
             l=0;
             p=tete->suivant;
             q=p->suivant;            
             while(p->suivant!=fin){
              if(p->info < q->info){
                l=1;
                m=p->info;
                p->info=q->info;
                q->info=m;
                }
               q=q->suivant;
               p=p->suivant;
              };
             }while(l==1);
         else;
         }
    void vider(){
         node *p;
         int i=0;
         p=new node;
         p=tete;
         while(p->suivant!=fin){
             i++;
             p=p->suivant;
         };
        if(i>=1)
         {
         for(int j=0;j<i;j++)
           suprtete();
        cout<<"\n\n\tliste videe\n\n";
        }
        else
         cout<<"\n\n\tliste deja vide\n\n";
    }
 };

int main(){
int i,j,e,f,k,s,err;
char o;
liste l;
do{
 cout<<"\t\t********************menu********************\n\n";
 cout<<"\t1- inserer un entier\n\t2- retirer un entier\n\t3- afficher la liste\n";
 cout<<"\t4- trier la liste ";
 cout<<"\n\t6- pour quitter le programme\n\t5- vider la liste\n\n";
 do{
  cout<<"\nchoisir l'operation a faire par numero :\t";
  cin>>i;
   }while(i<1 || i>7);
  switch(i) {
   case 1: do{
             cout<<"\t\n1- en tete\n2- a la fin\n3- en une position donnee\n\nchoisir par numero :\t";
             cin>>j;
              }while(j<0 || j>3);
            switch(j){
              case 1 : cout<<"\n\ndonner l'entier a ajouter :   ";
                       cin>>e;
                       l.insertete(e);
                       k=0;
                       break;
              case 2 : cout<<"\n\ndonner l'entier a ajouter :   ";
                       cin>>e;
                       l.inserfin(e);
                       k=0;
                       break;
              case 3 : l.inserpos();
                       k=0;
                       break;
              }
            break;
   case 2 : do{
           
             cout<<"\n1- de la tete\n2- de la fin\n3- d'une position donnee\n4- un entier donne:\n";
             cout<<"\nchoisir par numero :\t";
             cin>>j;
              }while(j<0 || j>4);
             switch(j){
              case 1 : l.suprtete();
                       k=0;
                       break;
              case 2 : l.suprfin();
                       k=0;
                       break;
              case 3 : l.suprpos();
                       k=0;
                       break;
              case 4 : l.suprent();
                       k=0;
                       break;
              }
             break;
   case 3 : l.afficher();
            k=0;
            cout<<"appuyer sur une touche puis ENTRER pour revenir au menu\n";
            cin>>o;
            break;
   case 4 : do {
            
            cout<<"\n1- trier la liste dans le sens croissant\n2- trier la liste dans le sens decroissant\n";
            cout<<"\nchoisir par numero:  ";
            cin>>j;
            }while(j<1 || j>2);
            switch(j){
              case 1 : l.trierlist();
                       k=0;
                       break;
              case 2 : l.detrierlist();
                       k=0;
                       break;
            }
            break;

   case 5 : l.vider();
            k=0;
            cout<<"appuyer sur une touche puis ENTRER pour revenir au menu\n";
            cin>>o;
            break;

   case 6 : k=1;
            break;
   }
  }while(k==0);
cout<<"\n\nappuyer sur une touche pour quitter\n\n";
getch();
}

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.