Prévia do material em texto
class No: def _init_(self, dado=None): self.dado = dado self.proximo = None class ListaLigada: def _init_(self): self.inicio = None self.fim = None def inserir_inicio(self, dado): novo_no = No(dado) if self.inicio is None: self.inicio = novo_no self.fim = novo_no else: novo_no.proximo = self.inicio self.inicio = novo_no def inserir_fim(self, dado): novo_no = No(dado) if self.inicio is None: self.inicio = novo_no self.fim = novo_no else: self.fim.proximo = novo_no self.fim = novo_no def remover_inicio(self): if self.inicio is None: return None dado = self.inicio.dado if self.inicio == self.fim: self.inicio = None self.fim = None else: self.inicio = self.inicio.proximo return dado def remover_fim(self): if self.inicio is None: return None dado = self.fim.dado if self.inicio == self.fim: self.inicio = None self.fim = None else: no_atual = self.inicio while no_atual.proximo != self.fim: no_atual = no_atual.proximo no_atual.proximo = None self.fim = no_atual return dado def listar(self): lista = [] no_atual = self.inicio while no_atual: lista.append(no_atual.dado) no_atual = no_atual.proximo return lista def tamanho(self): return len(self.listar()) class Fila: def _init_(self): self.fila = ListaLigada() def inserir(self, dado): self.fila.inserir_fim(dado) def remover(self): return self.fila.remover_inicio() class Pilha: def _init_(self): self.pilha = ListaLigada() def inserir(self, dado): self.pilha.inserir_inicio(dado) def remover(self): return self.pilha.remover_inicio() pilha = Pilha() fila = Fila() ll = ListaLigada() def print_passo(n, ll, pilha, fila): print("\nPasso",n,":") print("Lista:") print(ll.listar()) print("Pilha:") print(pilha.pilha.listar()) print("Fila:") print(fila.fila.listar()) #1 for item in range(1, 6): ll.inserir_inicio(item) print_passo(1, ll, pilha, fila) #2 for i in range(ll.tamanho()): pilha.inserir(ll.remover_inicio()) print_passo(2, ll, pilha, fila) #3 for i in range(pilha.pilha.tamanho()): fila.inserir(pilha.remover()) print_passo(3, ll, pilha, fila) #4 for item in range(6, 11): ll.inserir_inicio(item) print_passo(4, ll, pilha, fila) #5 for i in range(ll.tamanho()): pilha.inserir(ll.remover_inicio()) for i in range(pilha.pilha.tamanho()): fila.inserir(pilha.remover()) print_passo(5, ll, pilha, fila) #6 print("\nPasso 6 :") print(fila.fila.listar(), "\n")