Estrutura de Dados
  • Programação e Estrutura de Dados
  • Estrutura de Dados
    • 1. Vetores e Matrizes
      • Vetores
      • Matrizes
      • Listas de Exercícios
    • 2. Listas Lineares
      • Lista Encadeada Simples
      • Lista Duplamente Encadeada
    • 3. Pilhas
      • Visão Geral
      • Operações
        • Criação de Pilhas
        • Inserção de elementos
        • Remoção de elementos
        • Impressão, topo e tamanho da pilha
      • Exemplo
    • 4. Filas
      • Visão Geral
      • Operações
        • Criação das Filas
        • Inserção de Elementos
        • Remoção de Elementos
        • Impressão, inicio e final da fila
      • Exemplo
    • 5. Recursividade
      • Visão geral
      • Exemplos
        • Execução do Algoritmo de Fibonacci Recursivo
    • 6. Algoritmos de Busca
      • Busca Sequencial
      • Busca Binária
      • Exemplos
    • 7. Algoritmos de Ordenação
      • Ordenação
      • Bubble Sort
      • Selection Sort
      • Insertion Sort
      • Merge Sort
      • Quicksort
    • 8. Árvores
      • Introdução
      • Árvores Binárias
      • Árvores Binárias de Busca
      • Árvores AVL
    • 9. Indexação e Hashing
    • 10. Grafos
  • Programação Orientada a Objetos
    • 1. Introdução a Orientação a Objetos
Powered by GitBook
On this page
  • Verificar o topo da pilha
  • Tamanho da Pilha

Was this helpful?

  1. Estrutura de Dados
  2. 3. Pilhas
  3. Operações

Impressão, topo e tamanho da pilha

Estrutura de Dados: Pilha

Estamos adicionando e removendo elementos, mas ainda não conseguimos acompanhar o crescimento e o topo da pilha.

Como tais funções devem ser implementadas. Neste caso, não há nomes fixos para esses métodos (como o PUSH e POP), mas eles devem ter nomes claros sobre isso.

Para imprimir a pilha, basta implementar o método __repr__ (recomendado para imprimir detalhes de um objeto).

class No:
  def __init__(self, carga=0, anterior=None):
    self.carga = carga
    self.anterior = anterior

  def __repr__(self):
    return '%s -> %s' % (self.carga, self.anterior)

class Pilha:
  def __init__(self):
    self.topo = None

  def is_empty(self):
    return self.topo is None

  def push(self, elemento):
    no = No(elemento)
    no.anterior = self.topo
    self.topo = no

  def pop(self):
    assert self.topo != None, "Impossível remover elemento de pilha vazia."
    self.topo = self.topo.anterior

  def __repr__(self):
    return "[" + str(self.topo) + "]"

Verificar o topo da pilha

Outra operação importante, é a verificação do topo da pilha. Para isso basta acessar o atributo topo do objeto pilha.

Tamanho da Pilha

Por fim, outra operação importante é a de verificação do tamanho da pilha. Faremos definindo um método __len__ para a nossa estrutura encadeada.

  def __len__(self):
    atual = self.topo
    c = 0
    while atual is not None:
      c += 1
      atual = atual.anterior
    return c

E nossa classe Pilha ficará assim:

class Pilha:
  def __init__(self):
    self.topo = None

  def is_empty(self):
    return self.topo is None

  def push(self, elemento):
    no = No(elemento)
    no.anterior = self.topo
    self.topo = no

  def pop(self):
    assert self.topo != None, "Impossível remover elemento de pilha vazia."
    self.topo = self.topo.anterior

  def __repr__(self):
    return "[" + str(self.topo) + "]"

  def __len__(self):
    atual = self.topo
    c = 0
    while atual is not None:
      c += 1
      atual = atual.anterior
    return c
PreviousRemoção de elementosNextExemplo

Last updated 4 years ago

Was this helpful?