begin process at 2012 05 27 18:29:35
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Application

 > LISTE SIMPLEMENT CHAINÉE EN POO

LISTE SIMPLEMENT CHAINÉE EN POO


 Information sur la source

Note :
5,5 / 10 - par 2 personnes
5,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Application Classé sous :liste, chainée, poo Niveau :Débutant Date de création :22/12/2005 Vu :6 945

Auteur : jebaliala

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

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

Source

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





 Sources de la même categorie

Source avec Zip Source avec une capture PROGRAMME DE SUDOKU par AffreuxJojp
Source avec Zip EVALUATEUR D'EXPRESSION ARITHMÉTIQUE par matrx180vTitanium
Source avec Zip Source avec une capture QBIBLIO GESTION DES PRÊTS par conatic
Source avec Zip Source avec une capture QL-CHATROOM V 1.0 par mature
Source avec Zip Source avec une capture GEOLOCALISATION par ganjarasta

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture LISTE CHAÎNÉE ORIENTÉE OBJET, BASÉE SUR LES TEMPLATES par exar
Source avec Zip LISTE CHAINÉE DANS UNE CLASSE par horchaniwissem
Source avec Zip LISTE CHAINÉE SUPPORTANT LES TEMPLATES par Zer0 le Her0
GESTION D'UNE CLASSE D'ÉLÈVES par mat1eu
Source avec Zip LISTE DOUBLEMENT CHAINÉE par damiendien

Commentaires et avis

Commentaire de EMSIEN le 22/12/2005 14:03:19

Salut,
Si je ne me trmope pas (pusique à la même période dans deux lieux différents et avec les memes class c'est bizarre un peu),il s'agit d'un TP en c++ Que tu postes par là?
Puisque je travaille sur le même truc au niveau d'un TP,j'ai pas encore examiné ton Code mais je te laisse mon e-mail au cas t'as besoin de causer Objet.
shkaff_school at hotmail point com
http://ntic.blogspirit.com

Commentaire de dj200812002 le 23/12/2005 21:36:59

Salut
Moi je suis un ami de EMSIEN et j'ai remarquer la même chôse que lui
et je trouve que c'est un travaille que lorsque tu términe tu publie directement
ça c'est trés bien et on veux bien partager avec toi cette experiense
si tu a besion de quelque chôse voila mon e_mail:
malki_abdelilah@hotmail.com

Commentaire de GaYel le 26/12/2005 12:08:51

Salut, je viens de regarder ton source et j'y ai vu pas mal d'erreur (dsl!)

- Tout d'abord tu devrais terminer ta forme canonique pour chacune de tes classes, en effet il manque à chaque fois la surcharge de l'opérateur '=' qui permet de faire par exemple "liste1=liste2".

-Ensuite plutot que de faire une méthode afficher tu devrais simplement faire une surcharge de l'opérateur '<<'.
En voici la définition:
ostream& operator<< (ostream&, const liste&);

-Un plus serait aussi de comparer, lors d'une construction par copie, la liste ou le noeud qui est passé en paramètre avec soi même. A quoi bon se recopier soi même?
if(this!=&l)...faire la copie

-Ensuite je dirai que ton destructeur ne marche tout simplement pas! Tu t'es trompé dans le delete, il faut que tu delete prec au lieu de parc! Sinon comment veux tu acceder aux suivants?

-Lors d'une insertion tu utilises deux pointeurs afin de pouvoir garder l'adresse (dans prec) de l'élément que tu devras renvoyer. Mais pourquoi ne pas utiliser un "superpointeur" (appelation locale de mes anciens profs) au lieu de deux pointeurs? Je m'explique il vaut mieux un "noeud **parc" plutot que deux pointeurs. "Parc" sera alors un pointeur de pointeur! Voilà donc ce que cela donnerait

noeud* liste::rech_pos(int x){
    if(tete==NULL)return NULL;
    noeud** parc=&tete;
    while(*parc!=NULL && (*parc)->get_val()!=x){  
        parc=&((*parc)->get_suiv());}
    return(*parc);
}

-Enfin dans ta suppression tu fais appel deux fois à ta méthode rech_pos ce qui impose de parcourir deux fois ta liste et sur un million d'élément c'est long!

noeud *prec=rech_pos(x);
if(prec==NULL)return false;

Mais il vaut mieux utiliser un "superpointeur" et on voit d'ailleurs dans un tel cas toute son utilité:

bool liste::supprimer(int x){
noeud** parc=&tete;
    while(*parc!=NULL && (*parc)->get_val()!=x){  
        parc=&((*parc)->get_suiv());}
if(*parc==NULL)
return false;

noeud *temp=*parc;
*parc=(*parc)->get_suiv(); //raccord
delete temp;
return true;
}


Bon voilà si tu as des questions n'hésites pas!
Bon code

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Liste chainée d'objets de classes différentes [ par gillig ] Voici un problème auquel je ne trouve pas de réponse, enfin, rien d'efficace.J'ai une classe CDessin contenant une liste chaînée (CList) de pointeurs liste chainée [ par krater ] sur un projet de video-club nous avons utilise une liste double chainées cepedant, nous avons quelque récurent à la compillation si une reponse pouvai Liste chainée en C++ sans STL (ni vector ni template) [ par Tamahome ] Bonjour,je cherche un exemple de liste chainée (sans STL: ni vector ni template) enC++ (pas en C) permettant de chainer des objets héterogenes (par ex liste chainée [ par rastatouin ] en ce qui concerne la liste chainée, quelqu'un aurai un exemple bien expliquer concernant sa creation, l'ajout, la modif, laffiche, le tri svp Lecture d'un fichier texte pour mettre dans une liste chainée [ par webgladiator ] Merci de prendre du temps à me lire.J'ai un projet d'info dont le but est d'effectuer le plus court itinéraire dans le metro parisien (opimisation).J' recherche dans une liste chainée [ par sossouha ] salut, J'ai à faire le recherche d'un caractère dans une liste chainée en langage C. voici la structure que j'utilise typedef struct arc { char va Help urgent !! liste doublement chainée [ par arthur007 ] Bonjour à touspuisuqe je suis un débutant dans la programmation C, j'ai besoin de votre aide.j'ai 2 structures: typedef struct Comp{int Code; char Nom liste chainée: type file d'attente [ par cunbreizh ] MAIDER! MAIDER!Votre texte ICIVotre texte ICIdébutant dans la prog en C. Je cherche à programmer de la manière la plus simple et basic possible une st Du remord pour vector [ par guifr ] Bonjour &#224; tous, Dans une application je dois utiliser des tableaux dynamiques. Ma premi&#232;re id&#233;e &#233;tait de cr&#233;er des listes ch clonage de liste chainée et suppression [ par avillenave ] Bonjour, Je d&#233;veloppe actuellement en C, un algo de recuit simul&#233; avec un calcul d'entropie J'ai un tableau de liste chain&#233;e B


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales