Aller au contenu

Algo avancé

test Git depuis linux

Strutures de données

Pile (Stack)

LIFO (Last In, First Out) : (Dernier arriver, premier sortie)

Empiler (push) : ajouter sur la pile Sommet (peek) : sommet de la pile Dépiler (pop) : retirer de la pile estVide (isEmpty) :

historique (retour sur le site d'avant); CTRL-Z.
def PileVide():
    return []

def Empiler(x, p):
    p.append(x)

def EstVide(p):
    return (p == [])

def Sommet(p):
    return p[-1]

def Depiler(p):
    p.pop(-1)

def creer_pile(n,p):
    if n > 0:
        for i in range(n):
            Empiler(int(input("Element à ajouter a la pile : ")),p)
    print(p)


def vider_pile(p):
    if not EstVide(p):
        print(Sommet(p))
        Depiler(p)
        vider_pile(p)

p = PileVide()

creer_pile(6,p)

vider_pile(p)

Exemple : historique (retour sur le site d'avant); CTRL-Z.

Implémentation :

Tableau ; Liste chainée (la valeurs et le pointeurs de la prochaine valeurs)

File (Queue)

FIFO (First In, First Out) : (Premiere arriver, premier sortie)

Enfiler (enqueue) : ajouter sur la file Defiler (dequeue) : retirer de la file Tête (head) : premier element de la file

Systeme d'impresion, ordre de tâches, ...
def Enfiler(n,q):
    q.append(n)

def Defiler(q):
    q.pop(0)

def EstVide(q):
    return(q == [])

def Tete(q):
    return(q[0])

def FileVide():
    return []

def creer_file(n,q):
    if n > 0:
        for i in range(n):
            Enfiler(int(input("Element à ajouter a la file : ")),q)
        print(q)

def vider_file(q):
    if not EstVide(q):
        print(Tete(q))
        Defiler(q)
        vider_file(q)

q = FileVide()

creer_file(5,q)

vider_file(q)    

Sources