ampholyte a écrit:Ba oui, peut-être que je n'étais pas très clair.
Une liste doublement chainée est une structure contenant un pointeur sur l'élement précédent et un pointeur sur l'élément suivant :
- Code: Tout sélectionner
typedef struct List List;
struct List {
int val;
struct List *prev;
struct List *next;
};
Une liste chainée est une structure contenant un pointeur vers l'élément suivant OU (exclusif) l'élement précédent.
- Code: Tout sélectionner
typedef struct List List;
struct List {
int val;
struct List *prev;
};
ou
- Code: Tout sélectionner
typedef struct List List;
struct List {
int val;
struct List *next;
};
Après c'est juste une appelation, ce qui compte c'est de savoir les manipuler =).
Par contre l'avantage des listes chainées par rapport à des tableaux c'est la facilité et la rapidité pour stocker des élements dans celle-ci.
L'avantage des tableaux c'est la rapidité d'accès aux données (si tu connais la position).
Après il est tout à fait possible pour un tableau d'avoir le comportement d'une liste chainée avec les avantages du tableau mais il faudra jouer avec le realloc.
Après c'est aussi une question de choix. Personnellement, je n'utilise que très rarement les listes chainées et je préfère utiliser des tableaux de structures dynamiques (c'est aussi imposé par mes supérieurs, donc ça me convient :zen: ).
Algorithme GesEtud
Type
Notes : Enregistrement
noteCc : Réel
noteEx : Réel
Fin Notes
Etudiant : Enregistrement
matricule : Entier
Nom : chaine[30]
Prénom : chaine[20]
Note : Notes
Fin Etudiant
Var
P :*type tableau
Allouer(p)
p -nil
Procédure SaisiNotes
Var
Début
noteEntrer : Réel
Répéter
Ecrire ("donner Note contrôle contenu

;
Lire (p.noteEntrer) ;
Jusquà p.noteEntrer

0 ET p.noteEntrer

20
E.Note.NoteCc _ p.noteEnter
Répéter
Ecrire ("donner Note examen

,
Lire (p.noteEntrer)
Jusquà p.noteEntrer

0 ET p.noteEntrer

20
p.Note.NoteEx p.noteEnter
Fin
Procédure Remplissage (m : Entier ; var T : TAB)
Var i:entier
Début
i : Entier
Pour i de 1 à m faire
Ecrire("matricule : "),
Lire (p.matricule)
Ecrire ("Nom : "),
Lire (p.Nom)
Ecrire ("Prénom : "),
Lire (p.Prénom) p.saisiNote) ;
Fin Pour
Fin
-Procédure AfficheNotes
Début
Ecrire ("Note Contôle Contenu Note Examen ") Ecrire ("************************************")
Ecrire (p.Note.NoteCc," ",p.Note.NoteEx)
fin
-Procédure Affichage (m : Entier)
Début
i : Entier
Ecrire ("matricule: ; Nom: ;Prénom : ")
Ecrire ("****************************************")
Pour i de 1 à n faire
Ecrire (p.matricule," ",)
Lire (p.Nom," ", p.Prénom)
AfficheNotes(p)
Fin Pour
Fin
-Fonction MeilleureNote(m : Entier )
Début
i : Entier
NoteMax : Réel
NoteMax _ p.Note.NoteEx
Pour i de 2 à m Faire
Si p.Note.NoteEx > p. NoteMax Alors
p.NoteMax _ p.Note.NoteEx
Fin Si
Fin Pour
MeilleureNote _NoteMax
fin
-Fonction MoyenneGénérale(m : Entier) : Réel
Var
Début
i : Entier som : Réel
som _ 0
Pour i de 2 à m Faire
som _som + 0.3 x p.Note.noteCc + 0.7 x p.Note.noteEx
Fin Pour
MoyenneGénérale _ som / m
-Programme principal
n : entier
Remplissage (n,ET) Affichage(n,ET)
Ecrire (Meilleur note examen : MeilleureNote(n,ET)) ;
Ecrire( Moyenne générale de la classe : , MoyenneGénérale(n,ET)) ;
Fin
Je demande une correction.