begin process at 2008 08 28 05:09:51
1 232 921 membres
42 nouveaux aujourd'hui
14 291 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LISTES CHAINÉES...


Information sur la source

Catégorie :.Net Niveau : Débutant Date de création : 08/04/2003 Date de mise à jour : 08/04/2003 22:19:38 Vu : 2 243

Note :
Aucune note

Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

Description

//
// Exemple d'implémentation d'une liste simplement chaînée
//
// Ce prog. contient quelques fonctions élémentaires nécessaires à l'implémentation
// et au traitement d'une liste simplement chaînée contenant des entiers triés par ordre
// croissant.
//

Source

  • #include <iostream.h>
  • #include <stdlib.h>
  • struct NODE
  • {
  • int data;
  • NODE * next ;
  • };
  • NODE* CreateList(NODE *);
  • NODE* DeleteList(NODE *);
  • NODE* InsertElement(NODE *, const int&, bool&);
  • NODE* DeleteElement(NODE *, const int&, bool&);
  • NODE* ModifyElement(NODE *, const int&, const int&, bool&);
  • NODE* SearchElement(NODE *, const int&);
  • bool IsInList(NODE *, const int&);
  • int GetNumberOfElement(NODE *);
  • void PrintList(NODE *);
  • NODE* CreateList(NODE *head)
  • {
  • return NULL;
  • }
  • NODE* DeleteList(NODE *head)
  • {
  • NODE *cur;
  • cur = head;
  • while (cur != NULL)
  • {
  • cur = head->next;
  • delete head;
  • head = cur;
  • }
  • return NULL;
  • }
  • NODE* InsertElement(NODE *head, const int& value, bool& result)
  • {
  • NODE *cur, *previous, *tmp;
  • result = false;
  • tmp = new NODE;
  • if (tmp == NULL)
  • return head;
  • tmp->data = value;
  • tmp->next = NULL;
  • if (head == NULL)
  • {
  • tmp->next = head;
  • head = tmp;
  • result = true;
  • return head;
  • }
  • if (value <= head->data)
  • {
  • tmp->next = head;
  • head = tmp;
  • result = true;
  • return head;
  • }
  • cur = head;
  • previous = NULL;
  • while ((cur != NULL) && (cur->data < value))
  • {
  • previous = cur;
  • cur = cur->next;
  • }
  • previous->next = tmp;
  • tmp->next = cur;
  • result = true;
  • return head;
  • }
  • NODE* DeleteElement(NODE *head, const int& value, bool& result)
  • {
  • NODE *cur, *previous;
  • result = false;
  • if (head == NULL)
  • return head;
  • if (value == head->data)
  • {
  • cur = head->next;
  • delete head ;
  • result = true;
  • head = cur;
  • return head;
  • }
  • cur = head;
  • while ((cur != NULL) && (cur->data != value))
  • {
  • previous = cur;
  • cur = cur->next;
  • }
  • if (cur == NULL)
  • return head;
  • previous->next = cur->next;
  • delete cur;
  • result = true;
  • return head;
  • }
  • NODE* ModifyElement(NODE *head, const int& oldValue, const int& newValue, bool& result)
  • {
  • NODE *cur;
  • result = false;
  • cur = head;
  • while ((cur != NULL) && (cur->data != oldValue))
  • cur = cur->next;
  • if (cur == NULL)
  • return head;
  • cur->data = newValue;
  • result = true;
  • return head;
  • }
  • NODE* SearchElement(NODE *head, const int& value)
  • {
  • NODE *cur;
  • if (head == NULL)
  • return head;
  • cur = head;;
  • while ((cur != NULL) && (cur->data != value))
  • cur = cur->next;
  • return cur;
  • }
  • bool IsInList(NODE *head, const int& value)
  • {
  • NODE *cur;
  • if (head == NULL)
  • return false;
  • cur = head;;
  • while ((cur != NULL) && (cur->data != value))
  • cur = cur->next;
  • if (cur == NULL)
  • return false;
  • return true;
  • }
  • int GetEltNbr(NODE *head)
  • {
  • NODE *cur;
  • int nbr = 0;
  • if (head == NULL)
  • return 0;
  • cur = head;
  • while (cur != NULL)
  • {
  • nbr++;
  • cur = cur->next;
  • }
  • return nbr;
  • }
  • void PrintList(NODE *head)
  • {
  • NODE *cur;
  • if (head == NULL)
  • {
  • cout << "la liste est vide" << endl;
  • return;
  • }
  • cur = head;
  • while (cur != NULL)
  • {
  • cout << cur->data << "\t";
  • cur = cur->next;
  • }
  • cout << endl;
  • }
  • int main(int argc, char* argv[])
  • {
  • int choice = 1;
  • NODE *head;
  • NODE *tmp;
  • int val, val1;
  • bool result;
  • head = CreateList(head);
  • cout << "Une liste d'entiers ordonnés par ordre croissant a été créée." << endl;
  • while (choice != 0)
  • {
  • cout << endl
  • << " ======================" << endl
  • << " 1: InsertElement() : Ajouter un élément à la liste" << endl
  • << " 2: DeleteElement() : Supprimer un élément de la liste" << endl
  • << " 3: SearchElement() : Rechercher une valeur dans la liste" << endl
  • << " 4: IsInList() : Vérifier si une valeur est dans la liste" << endl
  • << " 5: ModifyElement() : Modifie une valeur dans la liste" << endl
  • << " 6: PrintList() : Imprimer la liste" << endl
  • << " 7: GetEltNbr() : Donner la taille de la liste" << endl
  • << " ======================" << endl
  • << " 0: Quitter" << endl
  • << " ======================" << endl
  • << endl
  • << "Votre choix : ";
  • cin >> choice;
  • cout << endl;
  • switch(choice)
  • {
  • case 1 :
  • cout << "Enter la valeur à ajouter : ";
  • cin >> val;
  • head = InsertElement(head, val, result);
  • if (result == false)
  • {
  • cout << "Erreur lors de l'insertion de " << val << endl;
  • head = DeleteList(head);
  • exit(0);
  • }
  • else
  • cout << "La valeur "<< val << " a été insérée dans la liste" << endl;
  • break;
  • case 2 :
  • cout << "Enter la valeur à supprimer : ";
  • cin >> val;
  • head = DeleteElement(head, val, result);
  • if (result == false)
  • cout << "Erreur lors de la suppression de : " << val << endl;
  • else
  • cout << "La valeur "<< val << " a été supprimée de la liste" << endl;
  • break;
  • case 3 :
  • cout << "Enter la valeur à rechercher : ";
  • cin >> val;
  • tmp = SearchElement(head, val);
  • if (tmp == NULL)
  • cout << val << "n'est pas dans la liste" << endl;
  • else
  • cout << "La valeur "<< val << "est dans la liste. Adresse : " << tmp << endl;
  • break;
  • case 4 :
  • cout << "Enter la valeur à rechercher : ";
  • cin >> val;
  • if (IsInList(head, val))
  • cout << val << " est dans la liste" << endl;
  • else
  • cout << val << " n'est pas dans la liste" << endl;
  • break;
  • case 5 :
  • cout << "Enter l'ancienne valeur : ";
  • cin >> val;
  • cout <<endl << "Enter la nouvelle valeur : ";
  • cin >> val1;
  • head = ModifyElement(head, val, val1, result);
  • if (result == false)
  • cout << "Erreur lors de la modification de " << val << " en "<< val1 <<endl;
  • else
  • cout << "La valeur "<< val << " a été modifiée en " << val1 <<endl;
  • break;
  • case 6 :
  • PrintList(head);
  • break;
  • case 7 :
  • cout << "La liste contient " << GetEltNbr(head) << " éléments."<< endl;
  • break;
  • case 0 :
  • break;
  • }
  • }
  • head = DeleteList(head);
  • cout << "La liste a été supprimée." << endl;
  • return 0;
  • }
#include <iostream.h>
#include <stdlib.h>

struct NODE				
{					
	int data;
	NODE * next ;		
};

NODE* CreateList(NODE *);				
NODE* DeleteList(NODE *);				
NODE* InsertElement(NODE *, const int&, bool&);	
NODE* DeleteElement(NODE *, const int&, bool&);
NODE* ModifyElement(NODE *, const int&, const int&, bool&);
NODE* SearchElement(NODE *, const int&);
bool IsInList(NODE *, const int&);
int GetNumberOfElement(NODE *);
void PrintList(NODE *);



NODE* CreateList(NODE *head)
{
	return NULL;
}

NODE* DeleteList(NODE *head)
{
	NODE *cur;

	cur = head;

	while (cur != NULL)
	{
		cur = head->next;
		delete head;
		head = cur;
	}

	return NULL;
}


NODE* InsertElement(NODE *head, const int& value, bool& result)
{
	NODE *cur, *previous, *tmp;

	result = false;

	tmp = new NODE;
	if (tmp == NULL)
		return head;

	tmp->data = value;
	tmp->next = NULL;

	if (head == NULL)
	{
		tmp->next = head;
		head = tmp;
		result = true;
		return head;
	}

	if (value <= head->data)
	{
		tmp->next = head;
		head = tmp;
		result = true;
		return head;
	}

	cur = head;
	previous = NULL;
	while ((cur != NULL) && (cur->data < value))
	{
		previous = cur;
		cur = cur->next;
	}

	previous->next = tmp;
	tmp->next = cur;

	result = true;

	return head;
}
				


NODE* DeleteElement(NODE *head, const int& value, bool& result)
{
	NODE *cur, *previous;

	result = false;

	if (head == NULL)
		return head;
	
	if (value == head->data)
	{
		cur = head->next;
		delete head ;
		result = true;
		head = cur;
		return head;
	}

	cur = head;
	while ((cur != NULL) && (cur->data != value))
	{
		previous = cur;
		cur = cur->next;
	}
	
	if (cur == NULL)
		return head;

	previous->next = cur->next;

	delete cur;

	result = true;

	return head;
}


NODE* ModifyElement(NODE *head, const int& oldValue, const int& newValue, bool& result)
{
	NODE *cur;

	result = false;

	cur = head;

	while ((cur != NULL) && (cur->data != oldValue))
		cur = cur->next;


	if (cur == NULL)
		return head;

	cur->data = newValue;

	result = true;

	return head;
}



NODE* SearchElement(NODE *head, const int& value)
{
	NODE *cur;

	if (head == NULL)
		return head;

	cur = head;;
	while ((cur != NULL) && (cur->data != value))
		cur = cur->next;

	return cur;
}
				

bool IsInList(NODE *head, const int& value)
{
	NODE *cur;

	if (head == NULL)
		return false;

	cur = head;;
	while ((cur != NULL) && (cur->data != value))
		cur = cur->next;

	if (cur == NULL)
		return false;

	return true;
}


int GetEltNbr(NODE *head)
{
	NODE *cur;
	int nbr = 0;

	if (head == NULL)
		return 0;

	cur = head;
	while (cur != NULL) 
	{
		nbr++;
		cur = cur->next;
	}

	return nbr;
}


void PrintList(NODE *head)
{
	NODE *cur;

	if (head == NULL)
	{
		cout << "la liste est vide" << endl;
		return;
	}

	cur = head;
	while (cur != NULL) 
	{
		cout << cur->data << "\t";
		cur = cur->next;
	}
	
	cout << endl;

}




int main(int argc, char* argv[])
{
	int choice = 1;
	NODE *head;
	NODE *tmp;
	int val, val1;
	bool result;
	
	head = CreateList(head);

	cout << "Une liste d'entiers ordonnés par ordre croissant a été créée." << endl;
	
	while (choice != 0)
	{
		cout << endl
			 << "     ======================" << endl
		     << "     1: InsertElement() : Ajouter un élément à la liste" << endl
			 << "     2: DeleteElement() : Supprimer un élément de la liste" << endl
			 << "     3: SearchElement() : Rechercher une valeur dans la liste" << endl
			 << "     4: IsInList()      : Vérifier si une valeur est dans la liste" << endl
			 << "     5: ModifyElement() : Modifie une valeur dans la liste" << endl
			 << "     6: PrintList()     : Imprimer la liste" << endl
			 << "     7: GetEltNbr()     : Donner la taille de la liste" << endl
			 << "     ======================" << endl
			 << "     0: Quitter" << endl
			 << "     ======================" << endl
			 << endl
			 << "Votre choix : ";
		
		cin >> choice;
		cout << endl;

		switch(choice)
		{
		case 1 :
			cout << "Enter la valeur à ajouter : ";
			cin >> val;
			head = InsertElement(head, val, result);
			if (result == false)
			{
				cout << "Erreur lors de l'insertion de " << val << endl;
				head = DeleteList(head);
				exit(0);
			}
			else
				cout << "La valeur "<< val << " a été insérée dans la liste" << endl;
			break;
		
		case 2 :
			cout << "Enter la valeur à supprimer : ";
			cin >> val;
			head = DeleteElement(head, val, result);
			if (result == false)
				cout << "Erreur lors de la suppression de : " << val << endl;
			else
				cout << "La valeur "<< val << " a été supprimée de la liste" << endl;
			break;
		
		case 3 :
			cout << "Enter la valeur à rechercher : ";
			cin >> val;
			tmp = SearchElement(head, val);
			if (tmp == NULL)
				cout << val << "n'est pas dans la liste" << endl;
			else
				cout << "La valeur "<< val << "est dans la liste. Adresse : " << tmp << endl;
			break;

		case 4 :
			cout << "Enter la valeur à rechercher : ";
			cin >> val;
			if (IsInList(head, val))
				cout << val << " est dans la liste" << endl;
			else
				cout << val << " n'est pas dans la liste" << endl;
			break;

		case 5 :
			cout << "Enter l'ancienne valeur : ";
			cin >> val;
			cout <<endl << "Enter la nouvelle valeur : ";
			cin >> val1;
			head = ModifyElement(head, val, val1, result);
			if (result == false)
				cout << "Erreur lors de la modification de " << val << " en "<< val1 <<endl;
			else
				cout << "La valeur "<< val << " a été modifiée en " << val1 <<endl;

			break;

		case 6 :
			PrintList(head);
			break;

		case 7 :
			cout << "La liste contient " << GetEltNbr(head) << " éléments."<< endl;
			break;

		case 0 :
			break;
		}
	}


	head = DeleteList(head);
	cout << "La liste a été supprimée." << endl;

	return 0;
}

Conclusion

Merci au revoir.....
    Aucun commentaire pour le moment.

Ajouter un commentaire

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Boutique

Boutique de goodies CodeS-SourceS