Un algorithme est un ensemble fini de tâches dont chacune est : - Défini de façon rigoureuse et non ambiguë - Effective (pouvant être réalisée en un temps fini) 2. Définition d’un pointeur Un pointeur est un type simple qui contient l’adresse d’un espace de la mémoire. p : adresse de la variable pointée *p : valeur de la variable pointée &p : adresse du pointeur p 3. Utilité des pointeurs - Réaliser des structures dynamiques (allocation dynamique de la mémoire) telles que les listes chaînées, les tableaux dynamiques - Passage par référence des paramètres (fonctions) - Gestion efficace de structure complexe (graphe, arbre) 4. Utilité de l’allocation dynamique L’allocation dynamique permet en cours d’exécution d’un programme d’allouer un espace mémoire dont la taille n’est pas connue au préalable lors de la compilation. 5. Quelles sont les fonctions qui réalisent l’allocation dynamique ? Les fonctions qui réalisent l’allocation dynamique sont les fonctions malloc () et calloc (). 6. Utilisation de la fonction malloc () La fonction malloc (N) renvoie l’adresse d’un bloc mémoire de N octets libres et NULL s’il n’y a pas assez d’espace libre. 7. Utilisation des opérateurs sizeof (type) et free () - sizeof (type) fournit la taille de « type » dans la machine utilisée - free () libère de l’espace mémoire préalablement alloué par les fonctions malloc () ou calloc (). 8. Différence entre malloc et calloc La différence entre les fonctions malloc () et calloc () est que la fonction calloc () contrairement à malloc () après avoir alloué l’espace mémoire initialise tous les éléments à 0. 9. Allocation dynamique de mémoire pour un tableau à deux dimensions /*On crée un tableau tab[m][n]*/ int **tab, m, n, i; scanf(“%d %d”, &m, &n); *tab=(int **)malloc(m*sizeof(int*)); for(i=0;i<n;i++){ tab[i]=(int *)malloc(n*sizeof(int)); } 10.Quand dit-on qu’une fonction est récursive ? Une fonction est dite récursive lorsqu’elle est auto-référent c’est-à-dire qu’elle s’appelle elle-même (directement ou indirectement) dans sa définition. 11. Utilité de la récursivité - La récursivité sert pour définir les structures de données : arbres, expressions arithmétiques - La récursivité est utilisée pour accélérer les algorithmes 12. Quels sont les éléments à considérer lors de la définition d’une fonction récursive ? - Equation de récursivité : la fonction est auto-référent - Condition d’arrêt - Convergence 13. Fonction récursive bien définie 14.Définition d’une structure linéaire Une structure linéaire est une structure conçue de telle sorte que chaque fois que l’on passe du début à la fin de la structure, on parcourt tous ses éléments toujours dans le même ordre. 15.Définition d’une liste Une liste est un ensemble ordonné d’éléments dans lequel on peut accéder à n’importe quel élément. Une liste est une structure linéaire. 16.Comment peut-on faire l’implantation des listes ? - Par tableau - Par chaînage 17. Modèle d’implantation par tableau DEBUT TypeEl tab[TAILLE_MAX] Int taille FIN 18. Limites du modèle d’implantation des listes par tableau - Lorsque la taille des données dépasse celle du tableau - Quand il y’a une grande fluctuation des données, l’occupation de la mémoire n’est pas optimisée - L’opération de décalage des éléments vers la gauche ou vers la droite cause une lenteur dans l’exécution 19. Définition d’une liste chaînée Une liste chaînée est un ensemble fini d’éléments de même type qui se suivent logiquement (et non physiquement). 20. Définition d’une pile Une pile est une structure linéaire qui se caractérise par la méthode d’insertion et d’extraction d’un élément qui se font toujours à la même extrémité (Last In First Out). 21. Citez des exemples de traitement utilisant les piles - Boucles imbriquées - Parcours d’arbres - Procédures locales - Récursivité 22. Définition d’une file Une file est une structure linéaire ayant un caractère particulier : l’insertion se fait à une extrémité et l’extraction se fait à l’autre extrémité. 23. Définition d’un arbre Un arbre est une structure homogène dont chaque élément, appelé nœud, contient de l’information et plusieurs liens(pointeurs) vers des éléments du même type appelés nœuds fils ou successeurs. 24. Degré d’un nœud Le nombre de fils d’un nœud n est appelé degré du nœud. 25. Terminologie - Les nœuds terminaux, qui n’ont pas de fils, sont appelés feuilles ou nœuds externes. - Les nœuds qui ne sont pas des feuilles ou racine sont appelés nœuds internes. - Le prédécesseur d’un nœud est son père ou ancêtre direct. - Le successeur d’un nœud est son fils ou descendant direct. - Une branche de l’arbre est un chemin de la racine à l’une de ses feuilles. - Le bord gauche de l’arbre est le plus long chemin depuis la racine en ne suivant que les fils gauches. - Le bord droit de l’arbre est le plus long chemin depuis la racine en ne passant que par les fils droits. - Un chemin de longueur k entre deux nœuds u et v d’un arbre est la suite de nœuds {n0, n1, …, nk} telle que n0=u et nk=v et pour tout i appartenant à l’intervalle [1…p], ni-1=père(ni). - La hauteur d’un nœud est le nombre maximum de liens qu’il faut parcourir pour aller à une feuille. - La hauteur d’un arbre est la hauteur de sa racine. Soit A un arbre et n un nœud de A. 𝟎 𝒔𝒊 𝒏 = 𝒇𝒆𝒖𝒊𝒍𝒍𝒆 𝒉𝑨 (𝒏) = { 𝟏 + 𝒎𝒂𝒙 {𝒉𝑨 (𝒆), 𝒐ù 𝒆 𝒇𝒊𝒍𝒔 𝒅𝒆 𝒏} 26. Combien de type de parcours d’arbre existe-t-il ? Citez-les ! Il y’a deux catégories de parcours d’arbres : Le parcours en profondeur (préfixe, suffixe, symétrique) Le parcours en largeur 27. Définition d’un arbre binaire Un arbre binaire est un arbre de degré 2. - Chaque fils d’un nœud est soit fils gauche soit fils droit - Aucun nœud n’a plus d’un fils gauche ni plus d’un fils droit 28. Définition d’un arbre binaire complet Un arbre binaire complet est un arbre dont chaque nœud est soit une feuille soit de degré 2. 29. Nombre maximal de nœud dans un arbre binaire 𝑝−1 ∑ 2 𝑖 = 2𝑝 − 1 𝑖=0