begin process at 2010 03 22 09:48:57
  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 :4 353

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 une capture POWER MATH: TESTE DE VITESSE ENTIERS VS REELS , CLASS VS STR... par dedalusman
Source avec Zip PARSER XML par MagnumPP
[C BZLIB] LIRE ET ÉCRIRE UN FICHIER COMPRESSÉ par Zestyr
Source avec Zip Source avec une capture BOT DE CLIC (SIMULATION DE CLIC PARAMÈTRABLE) par jojo930
Source avec Zip Source avec une capture [C++] GENERATEUR DE PSEUDO par Miwik

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...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

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

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