PRG29003: Introdução a Pilhas
Ir para navegação
Ir para pesquisar
Pilhas são estruturas do tipo LIFO (Last In First Out - último a entrar, primeiro a sair). Apenas duas operações são possíveis de modificar pilhas:
* 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 |
A declaração da Pilha na biblioteca Prglib é esta:
template <typename T> class pilha : public std::stack<T> {
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;
int main() {
// uma pilha com capacidade de armazenar 20 inteiros
prglib::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;
}
}