•
Pilha de
tipos
Vamos demonstrar o exemplo da pilha.
Existem duas restrições para tipos de dados não primitivos
no exemplo: eles devem ter um construtor default e devem suportar o operador
de atribuição.
As definições de funções das classes gabaritos devem ficar no arquivo .h
// tstatck.h
#ifndef TSTACK_H
#define TSTACK_H
// uma stack é uma pilha
template< class Tipo >
class Pilha {
public :
Pilha( int = 10 );
~Pilha();
//~Pilha() { delete [] ponteiro; }
// push = inserir
bool push( const Tipo & );
// pop = excluir
bool pop( Tipo & );
private:
int tamanho;
int topo;
// ponteiro para pilha
Tipo *ponteiro;
//bool vazio() const { return topo == -1; };
bool vazio() const;
//bool cheio() const { return topo
== tamanho - 1; }
bool cheio() const;
};
// definiçoes em .h
template< class Tipo >
Pilha< Tipo >::Pilha( int vtamanho)
{
tamanho = vtamanho > 0 ? vtamanho : 10;
// inicialmente a pilha está fazia
topo = -1;
// aloca espaço para
elementos
ponteiro = new Tipo[ tamanho ];
}
// destrutor
template< class Tipo >
Pilha< Tipo >::~Pilha()
{
delete [] ponteiro;
}
// Insere um elemento na pilha
template< class Tipo >
bool Pilha< Tipo >::push( const Tipo &novo_item )
{
if ( !cheio() )
{
ponteiro[ ++topo ] = novo_item;
return true;
}
return false;
}
template< class Tipo >
bool Pilha< Tipo >::pop( Tipo &item )
{
if ( !vazio() )
{
item = ponteiro[ topo-- ];
return true;
}
return false;
}
template< class Tipo >
bool Pilha< Tipo >::vazio() const
{
return topo == -1;
}
template< class Tipo >
bool Pilha< Tipo >::cheio() const
{
return topo == tamanho - 1;
}
#endif
// main.cpp
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include "tstack.h"
int main()
{
Pilha< double > Tdouble_pilha( 5 );
double f = 1.1;
cout << "Inserindo elementos " << endl;
while ( Tdouble_pilha.push( f ) )
{
cout << f << " ";
f += 1.1;
}
cout << "\n\nA pilha ficou cheia " << endl;
cout << "Retirando elementos" << endl;
while ( Tdouble_pilha.pop( f ) )
{
cout << f << " ";
}
cout << "\n\nA pilha ficou vazia " << endl;
Pilha< int > Tint_pilha( 5 );
int a = 1;
cout << "Inserindo elementos " << endl;
while ( Tint_pilha.push( a ) )
{
cout << a << " ";
a += 1;
}
cout << "\n\nA pilha ficou cheia " << endl;
cout << "Retirando elementos" << endl;
while ( Tint_pilha.pop( a ) )
{
cout << a << " ";
}
cout << "\n\nA pilha ficou vazia " << endl;
system("pause");
return 0;
}
|