• Aucun résultat trouvé

TD4 – Manipulation de pointeurs et piles

N/A
N/A
Protected

Academic year: 2022

Partager "TD4 – Manipulation de pointeurs et piles"

Copied!
2
0
0

Texte intégral

(1)

TD4 – Manipulation de pointeurs et piles

Langage C (LC4) semaine du 22 février

1 Échange de tableaux.

Écrire une fonction qui échange deux tableaux d’entiertetr. Écrire l’appel de cette fonction dans la fonction main.

2 Concaténations

– Écrire une fonction qui prend en arguments deux tableaux et leurs tailles respectives et qui renvoie leur concaténation.

– Écrire une fonction qui prend en arguments deux chaînes de caractères et qui renvoie leur concaténation. Vous pourrez utiliser le fait qu’une chaîne de caractères se termine par ’\00.

3 Piles

Une pile est une structure de données dans laquelle les derniers éléments ajoutés sont les pre- miers à être récupérés. Une méthode pour implémenter une pile d’entiers consiste à stocker tous les éléments de la pile dans un tableau (le sommet de la pile se trouve dans la dernière case remplie de ce tableau) :

– lorsqu’on veut ajouter (empiler) un élément, on recopie tous les éléments (et le nouvel élément à la fin) dans un tableau plus grand d’une case ;

– lorsqu’on veut enlever le dernier élément (dépiler), on recopie tous les éléments sauf le dernier dans un tableau plus petit d’une case.

Cette implémentation est simple mais inefficace puisque les éléments de la pile sont recopiés à chaque opération. Il est plus astucieux de garder un tableau partiellement rempli (méthode de la pile amortie) :

– lorsque la pile déborde, plutôt que d’allouer un tableau plus grand d’une case, on alloue un tableau deux fois plus grand ;

– lorsque l’on dépile un élément, on ne recopie dans un tableau plus petit que si le tableau est aux trois quarts vide, auquel cas on divise sa taille par deux.

On utilise donc la structure suivante pour mettre en œuvre la méthode de la pile amortie : typedef struct {

int occupation;

int capacite;

int *elements;

} pile_amortie;

1

(2)

capacitereprésente le nombre de cases du tableau elements, tandis queoccupation représente le nombre de cases effectivement remplies. À partir de la case numéro occupation, il y a des cases non utilisées.

Question 1. Écrire une fonction pile_amortie *alloue_pile_amortie() qui crée une pile amortie de capacité initiale 0.

Question 2. Écrire une fonctionvoid libere_pile_amortie(pile_amortie *pile)qui libère la mémoire occupée par la pilepile. On veillera à bien libérer toute la mémoire oc- cupée.

Question 3. Écrire une fonctionvoid empile_pile_amortie(pile_amortie *pile, int n)qui empile l’entiernsur la pilepile.

Question 4. Écrire une fonction int depile_pile_amortie(pile_amortie *pile)qui dépile la pilepileet renvoie l’élément dépilé.

On utilise maintenant la structure suivante pour représenter une pile, utilisant la structure de données de liste chaînée :

typedef struct int_elem { int element;

struct pile *precedent;

} *int_pile;

Question 5. Écrire une fonctionint_pile alloue_pile()qui crée une pile vide.

Question 6. Écrire une fonction void libere_pile(int_pile p) qui libère la mémoire occupée par la pilep.

Question 7. Écrire une fonctionint empty_pile(int_pile p)qui renvoie un booléen et qui teste si la pile est vide.

Question 8. Écrire une fonctionvoid empile_pile(int_pile p, int n)qui empile l’en- tiernsur la pilep.

Question 9. Écrire une fonction int depile_pile(int_pile p) qui dépile la pile p et renvoie l’élément dépilé.

Question 10. Utiliser la structure de donnée de pile pour inverser l’ordre des éléments d’une liste donnée.

2

Références

Documents relatifs

Alors H est

Pour prouver la correction d’une fonction récursive, on procède en général par récurrence : on prouve d’abord que la sortie de la fonction est correcte pour les cas

5. Sur la première pile uniquement, en utilisant le vocabulaire introduit, indiquer ce qui arrive aux électrons au niveau de chacune des électrodes en précisant celle

On s’intéresse dans tout ce problème à une suite infinie de lancers d’une pièce équilibrée autour duquel deux joueurs J et J 0 s’affrontent. Le joueur J l’emporte si

Pour supprimer un des fi chiers d’une pile, ouvrez simplement la pile et faites glisser l’élément à l’extérieur, vers l’endroit où vous voulez le déposer.. Pour supprimer

Emplacement de la pile.- Pour ˆetre sˆ ur que le programme et la pile n’interf`erent pas, le microprocesseur i8086 a ´et´e con¸cu de telle fa¸con que le code et les

Exemple.- ´ Ecrivons un programme QBasic qui demande un entier naturel (de deux octets) et fait appel ` a un sous-programme en langage machine qui passe la valeur en

– à créer la pile comme un objet récursif (une pile est vide ou bien constituée d'un élément qui est son sommet et d'une pile) … voir question a) ci-dessous ;. – à créer