Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Maxime Six
Compte rendu TP AI01 : Listes chaînées.
On a en entrée le pointeur vers la liste vide et un pointeur d’une chaine à insérer dans la liste vide.
On crée un pointeur qui correspondra à l’élément vide après le premier élément de la chaine (tmp).
On crée ensuite le premier élément constitué du ou des caractères de la chaine d’entrée. On crée d’abord le
premier élément (1 er caractère) puis si la chaine comporte plusieurs, on ajoute à la liste les autres caractères.
On a en entrée le pointeur vers la liste non vide et un pointeur d’une chaine à insérer dans la liste vide.
On crée une liste vide temporaire puis on insert grâce à insert_empty list l’élément voulu dedans.
Ensuite cet élément sera inséré au début de la liste passée en paramètre (non nulle).
Complexité: O(1). La fonction insert_empty_list coûte O(1) et le reste des opérations sont élémentaires.
On a en entrée le pointeur vers la liste no vide et un pointeur d’une chaine à insérer dans la liste vide.
On crée une liste vide temporaire puis on insert grâce à insert_empty list l’élément voulu dedans.
Ensuite cet élément sera inséré à la fin de la liste passée en paramètre (non nulle).
Complexité: O(1). La fonction insert_empty_list coûte O(1) et nous n’avons que des opérations élémentaires.
TP AI01 Alexandre Taesch
Maxime Six
• int insert_after_position(List *list, char *str, int p)
On a en entrée le pointeur vers la liste non vide, un pointeur d’une chaine à insérer dans la liste vide et un entier
correspondant à la position de la liste à laquelle on veut insérer.
On va parcourir la liste pour trouver le P ème élément pour pouvoir insérer à cette position.
Une fois qu’on a trouver cette position dans la liste, on répète les opérations d’insertions.
Complexité: O(n). Dans le meilleur de cas, soit la liste est vide, soit on insère au début, on a O(1). Et dans le
pire de cas, on parcourt toute la liste, ce que nous donne O(n).
On a en entrée le pointeur vers la liste non vide et un entier correspondant à la position de la liste à laquelle on
veut supprimer.
On va parcourir la liste pour trouver le P ème élément pour pouvoir supprimer à cette position.
Une fois qu’on a trouvé l’élément à supprimer, si il n’est pas au début ou en fin de
liste, on crée une liste intermédiaire en le remplissant avec les sous éléments de cet
éléments (chaque caractères) puis on supprime cette liste. Le nouvel élément
suivant à l’élement précédent l’élement supprimé est indiqué par posPrec-
>next=pos->next.
Complexité: O(n). Pour trouver la bonne position de donnée à détruit, on doit parcourir la liste de taille n.
On a en entrée le pointeur vers une première chaine de caractère et un autre pointeur vers une autre chaine de
caractère.
On va ensuite comparer simplement les deux chaines puis retournons 1 si str1>str2 et 2 sinon.
Complexité: O(1). On a un test simple et dans chaque cas une opération tient en compte.
A la fin on obtient une Liste2 trié, on fait pointer le head de Liste1 sur le head de Liste2 et le tail de Liste1 sur le
tail de Liste2
Bonus
• Idées d’amélioration
Au niveau des possibilités d’amélioration, on peut imaginer la possibilité de faire une calculatrice avec ces
nombres et cette structure comportant tous les calculs élémentaires , mais aussi des calculs plus complexes.
On peut imaginer étendre ce projet avec des nombres floattant.