{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "

Implémentations d'une Pile : avec une liste ou avec une classe

\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

1. Avec une liste


\n", "La fonction de création de pile devient donc :\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Initialisation d'une pile vide :\n", "def creer_pile():\n", " \"Renvoie une pile vide.\"\n", " return []\n", "\n", "# On créera ainsi une pile, initialement vide par p = creer_pile()\n", "# Compléter l'implémentation avec les fonctions suivantes ci-dessous\n", "def est_vide(p):\n", " \"teste si p est vide et renvoie le booléen obtenu.\"\n", " pass\n", "\n", "def empiler(p, x):\n", " \"empile l'élément x sur la pile p.\"\n", " pass\n", "\n", "def depiler(p):\n", " \"dépile et renvoie l'élément au sommet de la pile p.\"\n", " pass" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# tests\n", "p=creer_pile()\n", "assert est_vide(p)==True\n", "empiler(p,\"bob\")\n", "empiler(p,\"Alice\")\n", "assert depiler(p)==\"Alice\"\n", "assert est_vide(p)==False\n", "depiler(p)\n", "assert est_vide(p)==True" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Complèter le code des fonctions suivantes en utilisant uniquement les 4 fonctions de bases définies ci-dessus : ( ne pas utiliser len pour taille(p))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def sommet(p):\n", " \"renvoie le sommet de pile p ou un message d'erreur si la pile st vide\"\n", " pass\n", "\n", "def taille(p):\n", " \"renvoie la taille de pile p. attention la pile doit etre conservée ds son état initial \"\n", " pass\n" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "Prévoir l'affichage du code suivant puis l'éxécuter pour tester vos fonctions précédentes" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "p1=creer_pile()\n", "for i in range(5):\n", " empiler(p1,2*i)\n", "print(p1)\n", "print(sommet(p1))\n", "depiler(p1)\n", "depiler(p1)\n", "print(est_vide(p1))\n", "print(sommet(p1))\n", "print(taille(p1))\n", "print(sommet(p1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

2. Avec une classe pour l'implémentation d'une Pile

\n", "Voici une définition de la classe pile avec une méthode d'affichage.
\n", "Compléter-la " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "class Pile:\n", " \"classe pile non bornée\"\n", " def __init__(self):\n", " \"\"\"initialisation d'une pile vide\"\"\"\n", " self.L = []\n", " \n", " def est_vide(self):\n", " \"\"\"teste si la pile est vide\"\"\"\n", " pass\n", " \n", " def depiler(self):\n", " assert not self.est_vide(), 'Pile vide'\n", " pass\n", "\n", " def empiler(self, x):\n", " \"empile x sur la pile\"\n", " \n", " def __str__(self):\n", " \"\"\" affichage de la pile sous la forme > 2 3 1] avec 2 le sommet et 1 le bas de la pile\"\"\"\n", " mot=\"]\"\n", " for e in self.L: \n", " mot=\" \"+str(e)+\" \"+mot\n", " mot=\">\"+mot\n", " return mot \n", " " ] }, { "cell_type": "raw", "metadata": {}, "source": [ "Prévoir l'affichage de l'éxécution du code suivant, puis vérifier" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "p3=Pile()\n", "for i in range(9):\n", " p3.empiler(i)\n", "print(p3)\n", "\n", "for i in range(2):\n", " p3.depiler()\n", "print(p3.depiler())\n", "print(p3)\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ecrire les fonctions ( et non les méthodes !) taille et sommet en utilisant la classe Pile" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def taille(p):\n", " \"renvoie la taille de pile p. la pile doit etre conservée\"\n", " pass\n", "def sommet(p):\n", " \"renvoie le sommet de pile p ou un message d'erreur si la pile st vide\"\n", " pass" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "p4=Pile()\n", "for i in range(5,10):\n", " p4.empiler(i)\n", "print(p4)\n", "assert sommet(p4)==9\n", "assert taille(p4)==5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

3. cas particulier : Pile à capacité finie

\n", "Les fonctions de bases sont définies ci-dessous.
\n", "les valeurs du tableau sont initialisés à None sauf la 1ere valeur qui est le nombre d'élements dans la pile
\n", "Compléter par les fonctions taille(p), est_pleine(P), sommet(P)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def creer_pile_vide(N):\n", " \"Renvoie une pile vide de capacité N.\"\n", " T = [None for i in range(N + 1)]\n", " T[0] = 0\n", " return T\n", "\n", "\n", "def empiler(p, x):\n", " \"empile l'élément x sur la pile p.\"\n", " N = len(p) - 1\n", " assert p[0] < N, 'Pile pleine'\n", " p[0] += 1\n", " p[p[0]] = x # on empile\n", "\n", "def est_vide(p):\n", " \"teste si p est vide et renvoie le booléen obtenu.\"\n", " return p[0] == 0\n", "\n", "def depiler(p):\n", " \"dépile et renvoie l'élément x au sommet de la pile p.\"\n", " assert not est_vide(p), \"Pile vide\"\n", " x=p[p[0]]\n", " p[p[0]] = None\n", " p[0] -= 1 # on dépile\n", " return x\n", "\n", "def taille(p):\n", " \"renvoie la taille de pile p.\"\n", " \n", "\n", "def est_pleine(p):\n", " \"teste si p est pleine et renvoie le booléen obtenu.\"\n", "\n", "def sommet(p):\n", " \"renvoie le sommet de pile p.\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "p5=creer_pile_vide(5)\n", "print(p5)\n", "empiler(p5,8)\n", "empiler(p5,22)\n", "empiler(p5,2022)\n", "print(p5)\n", "depiler(p5)\n", "print(p5)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(sommet(p5))\n", "print(taille(p5))\n", "empiler(p5,-5)\n", "empiler(p5,3)\n", "empiler(p5,100)\n", "print(p5)\n", "print(est_pleine(p5))\n", "print(depiler(p5))\n", "print(est_pleine(p5))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.7" }, "vscode": { "interpreter": { "hash": "970a2a4939579a4c22872227820a264ec023ee5692739211cbaca24386397975" } } }, "nbformat": 4, "nbformat_minor": 2 }