begin process at 2012 02 09 19:40:50
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > LISTE CHAINÉE (DEV CPP)

LISTE CHAINÉE (DEV CPP)


 Information sur la source

Note :
Aucune note
Catégorie :Divers Niveau :Initié Date de création :27/12/2002 Date de mise à jour :27/12/2002 21:06:54 Vu :5 150

Auteur : Funcky

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

 Description

Exemple de liste chainée en CPP

Source

  • #include <iostream.h>
  • #include <stdio.h>
  • struct Element
  • {
  • int valeur;
  • Element* suivant;
  • };
  • Element* liste = NULL;
  • void Ajouter(int valeur)
  • {
  • Element* element= new Element;
  • // On fixe la valeur de l'élément
  • element->valeur = valeur;
  • // Comme on place le nouvel élément en début
  • // de liste, on dit que son suivant est le
  • // premier élément de la liste.
  • element->suivant = liste;
  • // Puis on remet à jour le pointeur vers le
  • // premier élément de la liste, qui est notre
  • // nouvel élément.
  • liste = element;
  • }
  • Element* Rechercher(int valeur)
  • {
  • Element* element = liste;
  • // La méthode de recherche est simple :
  • // On se place en première position, et tant
  • // qu'il y a des éléments suivants, on suit
  • // les flèches, jusqu'à ce qu'on trouve un
  • // élément de liste qui contienne la valeur
  • // recherchée.
  • while(element != NULL && element->valeur != valeur)
  • element = element->suivant;
  • // Ici, on renvoie une information pertinente :
  • // - ou bien on a trouvé quelque chose, auquel
  • // cas on renvoie ce quelque chose,
  • // - ou bien on n'a rien trouvé et element vaut
  • // NULL, qui est la valeur qui indique qu'un élément
  • // n'a pas été trouvé.
  • return element;
  • }
  • void Supprimer(Element* element)
  • {
  • Element* precedent = liste;
  • // Si l'élément à supprimer est le premier de
  • // la liste, alors le travail est vite fait.
  • if(element == liste)
  • {
  • liste = NULL;
  • delete element;
  • return;
  • }
  • // Sinon, il faut rechercher l'élément précédent,
  • // et détourner le pointeur de ce précédent pour
  • // pointer vers l'élément suivant celui à supprimer.
  • // Ainsi, il ne se trouve plus dans la liste.
  • while(precedent != NULL && precedent->suivant != element)
  • precedent = precedent->suivant;
  • if(precedent == NULL) return;
  • precedent->suivant = element->suivant;
  • delete element;
  • }
  • void Afficher()
  • {
  • Element* element = liste;
  • while(element != NULL)
  • {
  • cout << element->valeur << "\t";
  • element = element->suivant;
  • }
  • cout << endl;
  • }
  • int main(void)
  • {
  • Element* e;
  • Ajouter(10);
  • Ajouter(5);
  • Ajouter(13);
  • Ajouter(7);
  • Afficher();
  • e = Rechercher(5);
  • Supprimer(e);
  • Afficher();
  • return 0;
  • fflush (stdin);
  • getchar();
  • }
#include <iostream.h>
#include <stdio.h>

struct Element
{
	int valeur;
	Element* suivant;
};

Element* liste = NULL;

void Ajouter(int valeur)
{
	Element* element= new Element;
	// On fixe la valeur de l'élément
	element->valeur = valeur;
	// Comme on place le nouvel élément en début
	// de liste, on dit que son suivant est le
	// premier élément de la liste.
	element->suivant = liste;
	// Puis on remet à jour le pointeur vers le
	// premier élément de la liste, qui est notre
	// nouvel élément.
	liste = element;
}

Element* Rechercher(int valeur)
{
	Element* element = liste;
	// La méthode de recherche est simple :
	// On se place en première position, et tant
	// qu'il y a des éléments suivants, on suit
	// les flèches, jusqu'à ce qu'on trouve un
	// élément de liste qui contienne la valeur
	// recherchée.

	while(element != NULL && element->valeur != valeur)
		element = element->suivant; 

	// Ici, on renvoie une information pertinente :
	// - ou bien on a trouvé quelque chose, auquel
	// cas on renvoie ce quelque chose,
	// - ou bien on n'a rien trouvé et element vaut
	// NULL, qui est la valeur qui indique qu'un élément
	// n'a pas été trouvé.
	return element;
} 

void Supprimer(Element* element)
{
	Element* precedent = liste;
	// Si l'élément à supprimer est le premier de
	// la liste, alors le travail est vite fait. 
	if(element == liste)
	{
		liste = NULL;
		delete element;
		return; 
	} 

	// Sinon, il faut rechercher l'élément précédent,
	// et détourner le pointeur de ce précédent pour
	// pointer vers l'élément suivant celui à supprimer.
	// Ainsi, il ne se trouve plus dans la liste. 
	while(precedent != NULL && precedent->suivant != element)
		precedent = precedent->suivant;

	if(precedent == NULL) return;
	precedent->suivant = element->suivant;
	delete element;
}

void Afficher()
{
	Element* element = liste;
	while(element != NULL)
	{
		cout << element->valeur << "\t";
		element = element->suivant;
	}
	cout << endl;
} 

int main(void)
{
	Element* e;

	Ajouter(10);
	Ajouter(5);
	Ajouter(13);
	Ajouter(7);

	Afficher();

	e = Rechercher(5);
	Supprimer(e);

	Afficher();

	return 0;
    fflush (stdin);
    getchar();
}

 Conclusion

Pour ceux qui ne veulent pas faire du c++, mais du c, il faut remplacer les new par la ligne correspondante en malloc ...



 Sources du même auteur

LECTURE DE L'ENTÊTE D'UN FICHIER BMP [GCC]
CONVERTIR UN NOMBRE BINAIRE EN DÉCIMAL ET INVERSEMENT
HEURE SUR AFFICHEUR 7 SEGMENTS [GCC]
Source avec Zip GESTION DE PACK
Source avec une capture CALCULATRICE

 Sources de la même categorie

Source avec Zip ÉDITEUR DE RECTANGLES EN CONSOLE par seoseo
CONVERSION DE FICHIER EN FICHIER BMP par seoseo
Source avec Zip DETECTEUR EJP par idpro
Source avec Zip Source avec une capture SHOP MANAGER CONSOLE SUR WINDOWS par antho974
Source avec Zip JOUR DE NAISSANCE par fredg19

Commentaires et avis

Commentaire de trinitacs le 28/12/2002 09:29:07

Ce serait 10 fois mieux si tu ne mélangerais pas C et C++ car tu utilise new et delete qui sont spécifiques au C++.
Pour cela tu créer une classe template (autant faire du réutilisable sans ce fatiguer) liste et une autres classe template noeud. La classe liste permettera de gérer plusieurs liste chaînée contrairement à ton bricolage de créer une variable globale de type ELEMENT qui est le debut. La classe liste contient un pointeur vers le premier élément de la liste et la classe noeud fonctionne comme ta structure element.

voilà j'espère que je t'aurai aidé

Commentaire de Funcky le 28/12/2002 10:00:49

Ouai, j'aurais pu faire comme ca, mais en fait ce programme viend d'un TP d'info que j'ai du faire pour la fac et il nous était demandé de faire comme ca ... Faut pas chercher, le prof a parfaois de ces idées ...
Sinon, c'est une remarque intéressantes, et je vais le refaire comme ca alors ...

Commentaire de trinitacs le 28/12/2002 21:33:38

Si ça viens de ton prof je comprend :)

Commentaire de logant83 le 10/01/2007 22:55:59

j'ai testé ça marche pas

Commentaire de begueradj le 28/12/2009 10:03:27

1-ça ne marche pas ce code !

2-"Ce serait 10 fois mieux si tu ne mélangerais pas C et C++ " : comme disait le créateur du C++: on n'a pas le droit d'imposer sa philosophie (Orienté objet ou fonctionnel) et c'est le charme du C++

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 4,649 sec (3)

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