Pile: exo realisation de la primitive Empiler

Résolu
Bonjour je suis en train de relire mon cours mais je me demande si je n'ai pas mal écrit la solution de l'exo d'application .
Voici l'énoncé et la solution et en commentaire ce que je crois avoir oulié de noter. Qu'en pensez-vous? Merci pour votre aide
Enoncé:
1/ Soit une pile d’entier réaliser avec les entiers. Ecrire un module qui réalise la primitive Empiler()
2/ Soit une pile d’entier réaliser avec les entiers. Ecrire un module qui réalise la primitive Pilepleine()
Correction
Type pile = ↑structure
DEBUT
	Info :entier
	Suiv :pile
FIN
Var sommet :pile
Procedure Empiler(Donne val :entier
			  D/R sommet :pile) 
/**
* Ici devait-on pas déclarer p comme suit 
*var p = pile 
*? 
*/
DEBUT
	Si (pilePleine(sommet)=vrai) alors
		Ecrire « Impossible d’ajouter »
	Sinon 
		Allouer(p)
		P↑.info←val
		P↑.suiv ←NIL
		Si(pileVide(sommet)=vrai)alors
			Sommet ←p
		Sinon
			P.↑suiv ← sommet 
			Sommet ← p
		FINSI
	FINSI
FIN




Correction Exo 2

Type pile = ↑structure
DEBUT
	Info :entier
	Suiv :pile
FIN
Var sommet :pile
Procedure pilePleine(Donne sommet :pile) :booleen
/**
* Ici devait-on pas déclarer p comme suit 
*var p = pile 
*? 
*/
DEBUT
	Allouer(p)
	SI(p=NIL) alors
		Retourner(vrai)
	Sinon
		Liberer(p)/*Pourquoi doit-on liberer p? */
		Retourner(faux)
	FINSI
FIN

1 réponse

  1. Modérateur
    Bonjour,

    "Ici devait-on pas déclarer p comme suit var p = pile "
    Je pense que si, pour les deux cas.

    "Pourquoi doit-on liberer p?"
    Le principe de pilePleine est d'essayer d'allouer une nouvelle donnée (pour montrer que c'est possible) mais s'il a réussi il faut ensuite la libérer pour ne pas prendre inutilement la place et avoir à la fin de la procédure la même pile qu'au début.
    1
    1. Merci bcp .
      0