# Exercice 7

# f1.defile()    # tete = [1] et queue = [3, 4, 5].
# f1.enfile(2)   # tete = [1] et queue = [3, 4, 5, 2].
# f1.defile()    # tete = [] et queue = [3, 4, 5, 2].
# f1.enfile(3)   # tete = [] et queue = [3, 4, 5, 2, 3].
# f1.defile()    # tete = [3, 2, 5, 4, 3] et  queue = [].
# f1.defile()    # tete = [3, 2, 5, 4] et queue = [].
# f1.defile()    # tete = [3, 2, 5] et queue = [].

class Pile :
    def __init__(self) :
        self.contenu = []

    def empile(self,element) :
        self.contenu.append(element)

    def pile_vide(self) :
        return len(self.contenu) == 0

    def depile(self) :
        if self.pile_vide() :
            print("la pile est vide")
            return None
        else :
            return self.contenu.pop()

    def getSommet(self) :
        if self.pile_vide() :
            print("la pile est vide")
            return None
        else :
            return self.contenu[-1]

    def __repr__(self):
        s = ''
        for e in self.contenu:
            s += '|' + str(e) + '|\n'
        return s

class File :
    def __init__(self):
        self.tete = Pile()
        self.queue = Pile()

    def file_vide(self):
        return self.tete == self.queue == []
    
    def enfile(self, e):
        self.queue.empile(e)
    
    def defile(self):
        if self.file_vide():
            return None
        elif not self.tete.pile_vide():
            return self.tete.depile()
        else:
            while not self.queue.pile_vide():
                self.tete.empile(self.queue.depile())
            return self.tete.depile()

f1 = File()
f1.tete.contenu = [1, 2]
f1.queue.contenu = [3, 4, 5]
f1.defile()    # tete = [1] et la pile queue = [3, 4, 5].
print(f1.tete.contenu, f1.queue.contenu)
f1.enfile(2)   # tete = [1] et la pile queue = [3, 4, 5, 2].
print(f1.tete.contenu, f1.queue.contenu)
f1.defile()    # tete = [] et la pile queue = [3, 4, 5, 2].
print(f1.tete.contenu, f1.queue.contenu)
f1.enfile(3)   # tete = [] et la pile queue = [3, 4, 5, 2, 3].
print(f1.tete.contenu, f1.queue.contenu)
f1.defile()    # tete = [3, 2, 5, 4] et la pile queue = [].
print(f1.tete.contenu, f1.queue.contenu)
f1.defile()    # tete = [3, 2, 5] et la pile queue = [].
print(f1.tete.contenu, f1.queue.contenu)
f1.defile()    # tete = [3, 2] et la pile queue = [].
print(f1.tete.contenu, f1.queue.contenu)
