PRG29003: Introdução a Pilhas

De MediaWiki do Campus São José
Revisão de 14h58min de 15 de agosto de 2018 por 127.0.0.1 (discussão) (Atividades)
Ir para navegação Ir para pesquisar

Próxima aula


Pilhas são estruturas de dados lineares, em que os dados são retirados em ordem inversa a que foram inseridos. Esse comportamento é denominado LIFO (Last In First Out - último a entrar, primeiro a sair).



Algumas pilhas da vida real ...


Pilhas apresentam três operações típicas:

* Push: empilha um novo dado (acrescenta-o ao topo da pilha).
* Pop: desempilha um dado (retira-o do topo da pilha)
*Top: acessa o dado do topo da pilha (sem retirá-lo)


Algumas aplicações de pilhas são:


A declaração da Pilha na biblioteca Prglib é esta:

template <typename T> class pilha {
 public:
  // construtor: deve-se informar a capacidade da pilha
  pilha(unsigned int umaCapacidade);
 
  // construtor de cópia: cria uma pilha que é cópia de outra
  pilha(const pilha<T>& outra);
 
  // destrutor da pilha
  ~pilha();
 
  // operador de atribuição: torna esta pilha uma cópia de outra pilha
  pilha<T> & operator=(const pilha<T> & outra);
 
  // operações da pilha
 
  virtual void push(const T & dado); // empilha um dado
 
  T pop(); // desempilha um dado
 
  virtual const T& top() const; // retorna o dado do topo da pilha, sem retirá-lo
 
  bool vazia() const;
  bool cheia() const;
  unsigned int comprimento() const;
  void esvazia();
  unsigned int capacidade() const;
  
 private:
  unsigned int N;
};

Arquivo libs/pilha.h


... e um exemplo de uso é mostrado a seguir:

#include <iostream>
#include <string>
#include <prglib.h>

using namespace std;
using namespace prglib;

int main() {
  // uma pilha com capacidade de armazenar 20 inteiros
  pilha<int> numeros(20);

  numeros.push(6);
  numeros.push(8);
  numeros.push(10);
  numeros.push(12);

  cout << "Pilha de numeros tem comprimento=" << numeros.comprimento() << endl;

  while (not numeros.vazia()) {
    cout << "Topo da pilha: " << numeros.top() << endl;
    cout << "... desempilhou: " << numeros.pop() << endl;
  }

}

1 Atividades


Resolva esses problemas:

  1. Empilhador de caracteres
  2. Inversor das linhas de um arquivo
  3. Normalizar caminhos de arquivos
  4. Criação de uma fila usando pilhas