Liste simplement chainée en poo

Contenu du snippet

Manipuler les fonctions de base d'une liste simplement chainée avec la POO en C++

Source / Exemple :


//------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();
}

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.