Liste chainée (dev cpp)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 752 fois - Téléchargée 35 fois

Contenu du snippet

Exemple de liste chainée en CPP

Source / Exemple :


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

A voir également

Ajouter un commentaire

Commentaires

trinitacs
Messages postés
249
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
7 août 2003
1 -
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é
cs_Funcky
Messages postés
59
Date d'inscription
lundi 31 décembre 2001
Statut
Membre
Dernière intervention
11 mai 2006
-
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 ...
trinitacs
Messages postés
249
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
7 août 2003
1 -
Si ça viens de ton prof je comprend :)
logant83
Messages postés
90
Date d'inscription
lundi 20 février 2006
Statut
Membre
Dernière intervention
6 mars 2007
-
j'ai testé ça marche pas
begueradj
Messages postés
291
Date d'inscription
dimanche 4 octobre 2009
Statut
Membre
Dernière intervention
25 août 2014
1 -
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++

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.