Untitled

 avatar
unknown
plain_text
11 days ago
3.0 kB
16
Indexable
#include <iostream>
using namespace std;

struct Noeud {
	int valeur;
	int position;
	Noeud* suivant;
};

void ajouterDebut(Noeud*& tete, int valeur){
	Noeud* nouveauNoeud = new Noeud;
	nouveauNoeud->valeur = valeur;
	if (!tete){
		nouveauNoeud->position = 0;
	} else {
		nouveauNoeud->position = (tete->position)+1;
	}
	nouveauNoeud->suivant = tete; // tete au debut = nullptr
	tete = nouveauNoeud;
	cout << "Ajoute noeud" << endl;
}

void ajouterFin(Noeud*& tete, int valeur){
	Noeud* nouveauNoeud = new Noeud;
	nouveauNoeud->valeur = valeur;
	nouveauNoeud->position = 0;

	if (!tete) {
		tete = nouveauNoeud;
	} else {
		Noeud* courant = tete;
		while(courant->suivant != nullptr) {
			courant = courant->suivant;
		}
		nouveauNoeud->position = (courant->position)+1;
		courant->suivant = nouveauNoeud;
	}

	cout << "Ajoute a la fin" << endl;
}

void afficherP(Noeud* tete, int position){
	Noeud courant = *tete;
	do {
		if (courant.position == position){
                	cout << "Noeud:{valeur="<< courant.valeur << ",position="<< courant.position << "}" << endl ;
			return;
        	}
		courant = *courant.suivant;
	} while (courant.suivant != nullptr);

	if (courant.position == position){
        	cout << "Noeud:{valeur="<< courant.valeur << ",position="<< courant.position << "}" << endl ;
	} else {
		cout << "Il n'existe pas" << endl;
	}
}

void afficherListe(Noeud* tete){
	Noeud courant = *tete;
	while(courant.suivant != nullptr) {
		cout << "Noeud:{valeur="<< courant.valeur << ",position="<< courant.position << "}" << endl ;
		courant = *courant.suivant;
	}

	cout << "Noeud:{valeur="<< courant.valeur << ",position="<< courant.position << "}" << endl ;
}

void libererP(Noeud*& tete, int position){
	//liberer la tete
	if(position == 0){
		Noeud* tmp = tete;
		tete = tete->suivant;
		delete tmp;
		cout << "libere " << position << endl;
		return;
	} else {
		//liberer quelque position
		Noeud *courant = tete;
		while(courant->suivant != nullptr){
			if (courant->suivant->position == position){
				Noeud* tmp = courant->suivant;
				courant->suivant = courant->suivant->suivant;
				delete tmp;
				cout << "libere " << position << endl;
				return;
			} else {
				courant = courant->suivant;
			}
		}
	}
}

int main(){
	Noeud* tete1 = nullptr;
	ajouterDebut(tete1, 10);
	ajouterDebut(tete1, 20);
	ajouterDebut(tete1, 30);
	ajouterDebut(tete1, 40);


	Noeud* tete2 = nullptr;
        ajouterFin(tete2, 10);
        ajouterFin(tete2, 20);
        ajouterFin(tete2, 30);
        ajouterFin(tete2, 40);

	afficherListe(tete2);
	libererP(tete2,3);
	afficherListe(tete2);

	Noeud noeud1; // Pile (Stack)
	noeud1.valeur = 10;
	noeud1.position = 0;
	noeud1.suivant = nullptr;

	Noeud* noeud2 = new Noeud; // Tas (Heap)
	noeud2->valeur = 20;
	noeud2->position = 1;
	noeud2->suivant = nullptr;

	cout << "Valeur : " << noeud1.valeur << endl;
	cout << "Position : " << noeud1.position << endl;

	cout << "Valeur : " << noeud2->valeur << endl;
        cout << "Position : " << noeud2->position << endl;
}
Editor is loading...
Leave a Comment