<?xml version="1.0" encoding="UTF-8"?>

<upm-export>
	<title>Enseignement de l&#039;informatique et du numérique au lycée Boissy d&#039;Anglas</title>
	<link>https://icn-isn-boissy.yj.fr/wp</link>
	<description></description>
	<pubDate>Wed May 6 11:55:24 2026 / +0000  GMT</pubDate>
	<generator>Universal Post Manager 1.1.2 [ www.ProfProjects.com ] </generator>
	<language></language>
	
			<item>
			<title>les listes, les piles et les files</title>
			<link>https://icn-isn-boissy.yj.fr/wp/?p=2915</link>
			<pubDate>Wed May 6 11:55:24 2026 / +0000  GMT</pubDate>
			<guid isPermaLink="false">https://icn-isn-boissy.yj.fr/wp/?p=2915</guid>
			<content-encoded><![CDATA[<!-- wp:paragraph -->
<p>De nombreux algorithmes "classiques" manipulent des structures de données plus complexes que des simples nombres (nous aurons l'occasion d'en voir plusieurs cette année). Nous allons ici voir quelques-unes de ces structures de données. Nous allons commencer par des types de structures relativement simples : les listes, les piles et les files. Ces trois types de structures sont qualifiés de linéaires.</p>
<!-- /wp:paragraph -->

<!-- wp:embed {"url":"https://www.youtube.com/watch?v=v_g1yizlUxc","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"} -->
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<p style="clear:both"> YouTube Video: <a href="http://www.youtube.com/watch?v=v_g1yizlUxc">YouTube.com/watch?v=v_g1yizlUxc</a> </p>
</div></figure>
<!-- /wp:embed -->

<!-- wp:heading {"level":3} -->
<h3>Les listes</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Une liste est une structure de données permettant de regrouper des données. Une liste L est composée de 2 parties : sa tête (souvent noté&nbsp;<em>car</em>), qui correspond au dernier élément ajouté à la liste, et sa queue (souvent noté&nbsp;<em>cdr</em>) qui correspond au reste de la liste. </p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":2970,"sizeSlug":"large"} -->
<figure class="wp-block-image size-large"><img src="https://icn-isn-boissy.yj.fr/wp/wp-content/uploads/2020/10/liste.png" alt="" class="wp-image-2970"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Le langage de programmation Lisp (inventé par John McCarthy en 1958) a été un des premiers langages de programmation à introduire cette notion de liste (Lisp signifie "list processing"). Voici les opérations qui peuvent être effectuées sur une liste :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>créer une liste vide (L=vide() on a créé une liste L vide)</li><li>tester si une liste est vide (estVide(L) renvoie vrai si la liste L est vide)</li><li>ajouter un élément en tête de liste (ajouteEnTete (x,L) avec L une liste et x l'élément à ajouter)</li><li>supprimer la tête x d'une liste L et renvoyer cette tête x (supprEnTete(L))</li><li>Compter le nombre d'éléments présents dans une liste (compte(L) renvoie le nombre d'éléments présents dans la liste L)</li></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>La fonction&nbsp;<em>cons</em>&nbsp;permet d'obtenir une nouvelle liste à partir d'une liste et d'un élément (L1 = cons(x,L)). Il est possible "d'enchaîner" les cons et d'obtenir ce genre de structure : cons(x, cons(y, cons(z,L)))</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Exemples :</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Voici une série d'instructions (les instructions ci-dessous s'enchaînent):</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>L=vide() =&gt; on a créé une liste vide</li><li>estVide(L) =&gt; renvoie vrai</li><li>ajoutEnTete(3,L) =&gt; La liste L contient maintenant l'élément 3</li><li>estVide(L) =&gt; renvoie faux</li><li>ajoutEnTete(5,L) =&gt; la tête de la liste L correspond à 5, la queue contient l'élément 3</li><li>ajoutEnTete(8,L) =&gt; la tête de la liste L correspond à 8, la queue contient les éléments 3 et 5</li><li>t = supprEnTete(L) =&gt; la variable t vaut 8, la tête de L correspond à 5 et la queue contient l'élément 3</li><li>L1 = vide()</li><li>L2 = cons(8, cons(5, cons(3, L1))) =&gt; La tête de L2 correspond à 8 et la queue contient les éléments 3 et 5</li></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":4} -->
<h4>À faire vous-même 1</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Voici une série d'instructions (les instructions ci-dessous s'enchaînent), expliquez ce qui se passe à chacune des étapes :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>L = vide()</li><li>ajoutEnTete(10,L)</li><li>ajoutEnTete(9,L)</li><li>ajoutEnTete(7,L)</li><li>L1 = vide()</li><li>L2 = cons(5, cons(4, cons(3, cons (2, cons(1, cons(0,L1))))))</li></ul>
<!-- /wp:list -->

<!-- wp:separator {"opacity":"css"} -->
<hr class="wp-block-separator has-css-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading {"level":3} -->
<h3>Les piles</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>On retrouve dans les piles une partie des propriétés vues sur les listes. Dans les piles, il est uniquement possible de manipuler le dernier élément introduit dans la pile. On prend souvent l'analogie avec une pile d'assiettes : dans une pile d'assiettes la seule assiette directement accessible et la dernière assiette qui a été déposée sur la pile.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":2972,"sizeSlug":"large"} -->
<figure class="wp-block-image size-large"><img src="https://icn-isn-boissy.yj.fr/wp/wp-content/uploads/2020/10/piles.png" alt="" class="wp-image-2972"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Les piles sont basées sur le principe LIFO (Last In First Out : le dernier rentré sera le premier à sortir). On retrouve souvent ce principe LIFO en informatique.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Voici les opérations que l'on peut réaliser sur une pile :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>on peut créer une pile </li><li>on peut savoir si une pile est vide (pile_vide?)</li><li>on peut empiler un nouvel élément sur la pile (push)</li><li>on peut récupérer l'élément au sommet de la pile tout en le supprimant. On dit que l'on dépile (pop)</li><li>on peut accéder à l'élément situé au sommet de la pile sans le supprimer de la pile (sommet)</li><li>on peut connaitre le nombre d'éléments présents dans la pile (taille)</li></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Exemples :</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Soit une pile P composée des éléments suivants : 12, 14, 8, 7, 19 et 22 (le sommet de la pile est 22)&nbsp;<strong>Pour chaque exemple ci-dessous on repart de la pile d'origine</strong>&nbsp;:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>pop(P) renvoie 22 et la pile P est maintenant composée des éléments suivants : 12, 14, 8, 7 et 19 (le sommet de la pile est 19)</li><li>push(P,42) la pile P est maintenant composée des éléments suivants : 12, 14, 8, 7, 19, 22 et 42</li><li>sommet(P) renvoie 22, la pile P n'est pas modifiée</li><li>si on applique pop(P) 6 fois de suite, pile_vide?(P) renvoie vrai</li><li>Après avoir appliqué pop(P) une fois, taille(P) renvoie 5</li></ul>
<!-- /wp:list -->

<!-- wp:image {"id":2921,"sizeSlug":"large"} -->
<figure class="wp-block-image size-large"><img src="https://icn-isn-boissy.yj.fr/wp/wp-content/uploads/2020/09/piles1-1.png" alt="" class="wp-image-2921"/></figure>
<!-- /wp:image -->

<!-- wp:heading {"level":4} -->
<h4>À faire vous-même 2</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Soit une pile P composée des éléments suivants : 15, 11, 32, 45 et 67 (le sommet de la pile est 67). Quel est l'effet de l'instruction pop(P)</p>
<!-- /wp:paragraph -->

<!-- wp:separator {"opacity":"css"} -->
<hr class="wp-block-separator has-css-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading {"level":3} -->
<h3>Les files</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Comme les piles, les files ont des points communs avec les listes. Différences majeures : dans une file on ajoute des éléments à une extrémité de la file et on supprime des éléments à l'autre extrémité. On prend souvent l'analogie de la file d'attente devant un magasin pour décrire une file de données.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":2974,"sizeSlug":"large"} -->
<figure class="wp-block-image size-large"><img src="https://icn-isn-boissy.yj.fr/wp/wp-content/uploads/2020/10/file.png" alt="" class="wp-image-2974"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Les files sont basées sur le principe FIFO (First In First Out : le premier qui est rentré sera le premier à sortir. Ici aussi, on retrouve souvent ce principe FIFO en informatique.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Voici les opérations que l'on peut réaliser sur une file :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>on peut savoir si une file est vide (file_vide?)</li><li>on peut ajouter un nouvel élément à la file (ajout)</li><li>on peut récupérer l'élément situé en bout de file tout en le supprimant (retire)</li><li>on peut accéder à l'élément situé en bout de file sans le supprimer de la file (premier)</li><li>on peut connaitre le nombre d'éléments présents dans la file (taille)</li></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Exemples :</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Soit une file F composée des éléments suivants : 12, 14, 8, 7, 19 et 22 (le premier élément rentré dans la file est 22 ; le dernier élément rentré dans la file est 12). Pour chaque exemple ci-dessous on repart de la file d'origine :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>ajout(F,42) la file F est maintenant composée des éléments suivants : 42, 12, 14, 8, 7, 19 et 22 (le premier élément rentré dans la file est 22 ; le dernier élément rentré dans la file est 42)</li><li>retire(F) la file F est maintenant composée des éléments suivants : 12, 14, 8, 7, et 19 (le premier élément rentré dans la file est 19 ; le dernier élément rentré dans la file est 12)</li><li>premier(F) renvoie 22, la file F n'est pas modifiée</li><li>si on applique retire(F) 6 fois de suite, file_vide?(F) renvoie vrai</li><li>Après avoir appliqué retire(F) une fois, taille(F) renvoie 5.</li></ul>
<!-- /wp:list -->

<!-- wp:image {"id":2920,"sizeSlug":"large"} -->
<figure class="wp-block-image size-large"><img src="https://icn-isn-boissy.yj.fr/wp/wp-content/uploads/2020/09/files1-1.png" alt="" class="wp-image-2920"/></figure>
<!-- /wp:image -->

<!-- wp:heading {"level":4} -->
<h4>À faire vous-même 3</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Soit une file F composée des éléments suivants : 1, 12, 24, 17, 21 et 72 (le premier élément rentré dans la file est 72 ; le dernier élément rentré dans la file est 1). Quel est l'effet de l'instruction ajout(F,25)</p>
<!-- /wp:paragraph -->

<!-- wp:separator {"opacity":"css"} -->
<hr class="wp-block-separator has-css-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading {"level":3} -->
<h3>Types abstraits et représentation concrète des données</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Nous avons évoqué ci-dessus la manipulation des types de données (liste, pile et file) par des algorithmes, mais, au-delà de la beauté intellectuelle de réfléchir sur ces algorithmes, le but de l'opération est souvent, à un moment ou un autre, de "traduire" ces algorithmes dans un langage compréhensible pour un ordinateur (Python, Java, C,...). On dit alors que l'on implémente un algorithme. Il est donc aussi nécessaire d'implémenter les types de données comme les listes, les piles ou les files afin qu'ils soient utilisables par les ordinateurs. Les listes, les piles ou les files sont des "vues de l'esprit" présent uniquement dans la tête des informaticiens, on dit que ce sont des types abstraits de données (ou plus simplement des types abstraits). L'implémentation de ces types abstrait, afin qu'ils soient utilisables par une machine, est loin d'être une chose triviale. L'implémentation d'un type de données dépend du langage de programmation. Il faut, quel que soit le langage utilisé, que le programmeur retrouve les fonctions qui ont été définies pour le type abstrait (pour les listes, les piles et les files cela correspond aux fonctions définies ci-dessus). Certains types abstraits ne sont pas forcément implémentés dans un langage donné, si le programmeur veut utiliser ce type abstrait, il faudra qu'il le programme par lui-même en utilisant les "outils" fournis par son langage de programmation.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour implémenter les listes (ou les piles et les files), beaucoup de langages de programmation utilisent 2 structures : les tableaux et les listes chaînées.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Un tableau est une suite contiguë de cases mémoires (les adresses des cases mémoire se suivent) :</p>
<!-- /wp:paragraph -->

<!-- wp:image -->
<figure class="wp-block-image"><img src="https://pixees.fr/informatiquelycee/n_site/img/nsi_term_structDo_liste_3.png" alt="File"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Le système réserve une plage d'adresse mémoire afin de stocker des éléments.</p>
<!-- /wp:paragraph -->

<!-- wp:image -->
<figure class="wp-block-image"><img src="https://pixees.fr/informatiquelycee/n_site/img/nsi_term_structDo_liste_4.png" alt="File"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>La taille d'un tableau est fixe : une fois que l'on a défini le nombre d'éléments que le tableau peut accueillir, il n'est pas possible modifier sa taille. Si l'on veut insérer une donnée, on doit créer un nouveau tableau plus grand et déplacer les éléments du premier tableau vers le second tout en ajoutant la donnée au bon endroit !</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dans certains langages de programmation, on trouve une version "évoluée" des tableaux : les tableaux dynamiques. Les tableaux dynamiques ont une taille qui peut varier. Il est donc relativement simple d'insérer des éléments dans le tableau. Ce type de tableaux permet d'implémenter facilement le type abstrait liste (de même pour les piles et les files)</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>À noter que les "listes Python" (<a href="https://docs.python.org/fr/3/tutorial/datastructures.html" target="_blank" rel="noreferrer noopener">listes Python</a>) sont des tableaux dynamiques. Attention de ne pas confondre avec le type abstrait liste défini ci-dessus, ce sont de "faux amis".<img src="https://pixees.fr/informatiquelycee/n_site/img/nsi_term_structDo_liste_5.png" alt="File">tableau dynamique</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Autre type de structure que l'on rencontre souvent et qui permet d'implémenter les listes, les piles et les files : les listes chaînées.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dans une liste chaînée, à chaque élément de la liste on associe 2 cases mémoire : la première case contient l'élément et la deuxième contient l'adresse mémoire de l'élément suivant.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":2976,"sizeSlug":"large"} -->
<figure class="wp-block-image size-large"><img src="https://icn-isn-boissy.yj.fr/wp/wp-content/uploads/2020/10/liste-chainee1.png" alt="" class="wp-image-2976"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Il est relativement facile d'insérer un élément dans une liste chaînée :</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":2977,"sizeSlug":"large"} -->
<figure class="wp-block-image size-large"><img src="https://icn-isn-boissy.yj.fr/wp/wp-content/uploads/2020/10/liste-chainee1inser.png" alt="" class="wp-image-2977"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Il est aussi possible d'implémenter les types abstraits en utilisant des structures plus complexes que les tableaux et les listes chaînées. Par exemple, en Python, il est possible d'utiliser les tuples pour implémenter le type abstrait liste :</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":4} -->
<h4>À faire vous-même 4</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Étudiez attentivement les fonctions suivantes :</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>
def vide():
    return None
def cons(x,L):
    return(x,L)
def ajouteEnTete(L,x):
    return cons(x,L)
def supprEnTete(L):
    return (L&#91;0],L&#91;1])
def estVide(L):
    return L is None
def compte(L):
    if estVide(L):
        return 0
    return 1 + compte(L&#91;1])
		</code></pre>
<!-- /wp:code -->

<!-- wp:separator {"opacity":"css"} -->
<hr class="wp-block-separator has-css-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading {"level":4} -->
<h4>À faire vous-même 5</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Après avoir saisi et exécuté le programme étudié au "À faire vous-même 4", tapez successivement les commandes suivantes dans une console Python :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>L = vide()</li><li>estVide(L)</li><li>L = cons(5, cons(4, cons(3, cons(2, cons(1, cons(0,L))))))</li><li>estVide(L)</li><li>compte(L)</li><li>L = ajouteEnTete(L,6)</li><li>compte(L)</li><li>x, L=supprEnTete(L)</li><li>x</li><li>compte(L)</li><li>x, L=supprEnTete(L)</li><li>x</li><li>compte(L)</li></ul>
<!-- /wp:list -->

<!-- wp:separator {"opacity":"css"} -->
<hr class="wp-block-separator has-css-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading {"level":4} -->
<h4>À faire vous-même 6</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Étudiez l'implémentation des piles et des files en Python en vous aidant de la&nbsp;<a href="https://docs.python.org/fr/3/tutorial/datastructures.html" target="_blank" rel="noreferrer noopener">documentation officielle</a>&nbsp;(5.1.1 et 5.1.2).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><a href="https://icn-isn-boissy.yj.fr/wp/2020/10/05/3008/">Exercices sur les piles et les files</a></p>
<!-- /wp:paragraph -->

<!-- wp:separator {"opacity":"css"} -->
<hr class="wp-block-separator has-css-opacity"/>
<!-- /wp:separator -->

<!-- wp:paragraph -->
<p><a href="https://pixees.fr/informatiquelycee/n_site/fiches/T/05_liste_pile_file.pdf" target="_blank" rel="noreferrer noopener">FICHE REVISION</a></p>
<!-- /wp:paragraph -->

<!-- wp:image -->
<figure class="wp-block-image"><img src="https://pixees.fr/informatiquelycee/n_site/img/cc.png" alt=""/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Auteur : David Roche</p>
<!-- /wp:paragraph -->]]></content-encoded>
			<excerpt-encoded><![CDATA[]]></excerpt-encoded>
			<wp-post_id>2915</wp-post_id>
			<wp-post_date>2020-09-24 13:25:20</wp-post_date>
			<wp-post_date_gmt>2020-09-24 11:25:20</wp-post_date_gmt>
				</item>
</upm-export>
