Information

Une pile est fondée sur le principe: Last In First Out

  • creer_pile() -> Pile: crée une pile vide
  • est_vide(p: Pile) -> bool: renvoie True si la pile est vide, False sinon.
  • empiler(p: Pile, e: T) -> None: ajoute un élément e au sommet de la pile.
  • depiler(p: Pile) -> T: retire et renvoie l’élément du sommet de la pile.

                      class Element:
  def __init__(self, d: int, s: object):
      self.donnees = d
      self.successeur = s
                    
                    
class Pile:
    def __init__(self):
        self.sommet=None
        
    def est_vide(self)->bool:
        return self.sommet is None
    
    def empiler(self, e:int)->None:
        self.sommet=Element(e,self.sommet)
    
    def depiler(self)->int:
        if not self.est_vide():
          retour=self.sommet.donnees
          self.sommet=self.sommet.successeur
          return retour
    
    
    def __str__(self) -> str:
        affiche=""
        last = self.sommet
        while last is not None:
            # affichage vertical: \n = saut de ligne
            affiche += str(last.donnees) + "\n\u2193\n"
            last = last.successeur
        return affiche + "fin"

p = Pile()
p.empiler(3)
p.empiler(9)
p.empiler(4)
print(p)
print("dépile:", p.depiler())
print(p)   
                      
Information

Une file est fondée sur le principe: First In First Out

  • creer_file() () -> File: crée une file vide
  • est_vide(f: File) -> bool: renvoie True si la file est vide, False sinon.
  • enfiler(f: File, e: T) -> None: ajoute un élément e à la fin de la File.
  • defiler(f: File) -> T: etire et renvoie l’élément du début de la file.

                      class Element:
  def __init__(self, d: int, s: object):
      self.donnees = d
      self.successeur = s
                    
                    
  class File:
      def __init__(self):
          self.premier = None
          self.dernier = None
  
      def est_vide(self) -> bool:
          return self.premier == None
  
      def enfiler(self, e: int) -> None:
          nouveau = Element(e, None)
  
          if self.est_vide():
              # 1 seul élément: le premier est le dernier
              self.premier = nouveau
          else:
              # le dernier devient avant-dernier
              self.dernier.successeur = nouveau
  
          # le nouveau devient dernier
          self.dernier = nouveau
  
      def defiler(self) -> int:
          if not self.est_vide():
              res = self.premier.donnees
              self.premier = self.premier.successeur
              return res
  
      def __str__(self):
          c = self.premier
          s = ""
          while not c is None:
              s = s + str(c.donnees)+"|"
              c = c.successeur
          return "\u2BA4|" + s + "\u2BA0"

from random import randint

maFile = File()
for i in range(6):
    maFile.enfiler(randint(1, 20))
    print(maFile)

for i in range(6):
    maFile.defiler()
    print(maFile)
                      

La programmation orientée objet est un choix d’implémentation possible. Il n’est pas unique.

class Maillon:
  """
  Crée un maillon de la liste chaînée
  """

  def __init__(self, val: int, suiv: object):
      self.valeur = val
      self.suivant = suiv
class Liste:
  """
  Crée une liste chaînée
  """

  def __init__(self):
      # selt.tete référence un Maillon
      self.tete = None
Les méthodes ajoutées à l’objet Liste implémenteront l’interface proposée.
  class Liste:
    """
    Crée une liste chaînée
    """

    def __init__(self):
        # selt.tete référence un Maillon
        self.tete = None

    def est_vide(self) -> bool:
        return self.tete is None

    def ajouter(self, val: int) -> None:
        self.tete = Maillon(val, self.tete)

Annexes

Liens

Lien vers le notebook

    Sur Capytale

Pièces jointes