//------NOEUD.H
#include<iostream.h>
class noeud{
int val;
noeud* suiv;
public:
noeud(int,noeud* =NULL ); //espace necessaire entre * et =
~noeud() {};
noeud(const noeud &);
int get_val();
void set_val(int x);
noeud* get_suiv();
void set_suiv(noeud*);
};
//-----NOEUD.CPP
#include "noeud.h"
#include<stdlib.h>
#include<iostream.h>
noeud::noeud(int x,noeud* s):val(x),suiv(s){}
int noeud::get_val(){ return val;}
noeud* noeud::get_suiv(){return suiv;} //Pour lire seulement
void noeud::set_suiv(noeud* s){suiv=s;} //Pour la modification*/
noeud::noeud(const noeud & n):val(n.val),suiv(n.suiv){}
//------LISTE.H
#include"noeud.h"
#include<iostream.h>
class liste{
noeud* tete;
public:
liste(){tete=NULL;}
~liste();
liste(const liste &);
void insert(int x);
noeud* rech_pos(int);
bool supprimer(int);
void afficher();
};
//-------LISTE.CPP
#include "liste.h"
#include<stdlib.h>
#include<iostream.h>
#include<malloc.h>
//---------------------Constructeur par recopie---------------
liste::liste(const liste& l){
noeud* parcl;
noeud* parc;
if(l.tete==NULL)tete=NULL;
else
{
tete= new noeud (l.tete ->get_val());
parcl=l.tete ->get_suiv();
parc=tete;
while(parcl!=NULL)
{
int x=parcl->get_val();
noeud* nouv=new noeud (x);
parc->set_suiv(nouv);//jusqu'a ici(3.1° ligne)->-----par:parc->set_suiv(new noeud(parcl->get_val());
parc=parc->get_suiv();
parcl=parcl->get_suiv();
}
}
}
//---------------------Destructeur--------------------------------
liste::~liste(){
noeud* parc=tete;
while(parc!=NULL){
noeud* prec=parc ;
parc=parc->get_suiv();
delete parc;
}
}
//----------------------Insrtion----------------------------------
void liste::insert(int x)
{
noeud* nouv=new noeud(x);
nouv->set_suiv(tete);
tete=nouv;
//tete=new noeud(x,tete);
}
//----------------------Afficher la liste--------------------------
void liste::afficher(){
noeud* parc=tete;
cout.width(10);cout<<"LISTE:(";
while(parc!=NULL){
cout<<parc->get_val()<<",";
parc=parc->get_suiv();
}
cout<<")\n";
}
//--------------------Rechercher la position du x-----------------
noeud* liste::rech_pos(int x){
if(tete==NULL)return NULL;
noeud* parc=tete;
noeud* prec;
while(parc!=NULL&&parc->get_val()!=x){
prec=parc;
parc=parc->get_suiv();}
if(parc==NULL)return NULL;//x n'xiste pas
return(prec);
}
//---------------------Supprition d'un élèment---------------------
bool liste::supprimer(int x){
if(rech_pos(x)==NULL)return false;
noeud* pos_rech;
noeud* prec;
noeud* p_suiv;
//Si x dans la tete
if(x==tete->get_val()){pos_rech=tete;
tete=pos_rech->get_suiv();
delete pos_rech;
return true;
}
prec=rech_pos(x);
pos_rech=prec->get_suiv();
p_suiv=pos_rech->get_suiv();
delete pos_rech;
prec->set_suiv(p_suiv);
return true;
}
//----PROGRAMME_PRICIPALE.CPP
#include "liste.h"
#include<iostream.h>
#include<stdlib.h>
void main(){
liste l1;
int x;
cout.width(55);cout<<"-------------------------------------------\n";
cout.width(45);cout<<"Cree par: JEBALI ALA EDDINE"<<endl;
cout.width(55);cout<<"-------------------------------------------\n";
cout<<"Nombre des noeud du liste:";
int n;cin>>n;
for(int i=0;i<n;i++){
cout<<"\nRemplir:";cin>>x;
l1.insert(x);
}
l1.afficher();
cout<<"Suprimer:";
cin>>x;
if(!l1.supprimer(x))cout<<x<<" n'existe pas dans la liste\n";
l1.afficher();
}