Enviado em 02/10/2014 - 18:21h
Olá! Seguinte implementei todas as funcoes de uma Pilha
/**** main exemplo
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <stdio.h>
#include <ctype.h> //biblioteca p/ as funções isalpha isdigit toupper tolower
#include <unistd.h> //sleep
#include <locale.h>
#include <string.h>
#include <stdio.h>
#include \"pilhas.h\"
#include \"template.h\"
Pilha<char> p(5); // cria uma pilha de char de tamanho 5
p.exibe();
cout << \"<>\";
p.insere(\'a\');
p.insere(\'b\');
cout << \" elementos=\" << p.exibe() << \"??\"; // ***** PORQUE SEQUENCIA DE EXECUCAO DA LINHA E DE TRAZ PRA FRENTE
cout << endl << \" <<< INCOERENCIA RESULTADO ACIMA \" << endl;
p.exibe();
p.insere(\'c\');
// while( !p.vazia() ) cout << p << endl;
while( !p.vazia() ) cout << p.remove() << endl; //percorre a pilha e remove elementos
Pilha<double> q(5); // cria uma pilha de double
q.insere(1.2);
q.insere(3.4);
q.insere(5.6);
q.exibe();
//cout >> Pilhamenor(q);// >> \" \" >> maior(q) >> \"pilha\";
while( !q.vazia() ) cout << q.remove() << endl;
/*** fim main
/***** Pilha.h
/*********CLASSE DO CONTEUDO DE UMA PILHA************/
template <class Tipo>
class Pilha {
public:
Pilha(int); //construtor
~Pilha(void); //destrutor
//Tipo seleta(char a);
void insere(Tipo); //insere um elemento na pilha
Tipo remove(void); //remove um elemento na pilha
Tipo reseta(void);
Tipo exibe(void);
Tipo exibir(void);
Tipo topo(void);
Tipo anterior(void);
bool vazia(void);
bool cheia(void);
private:
int max;
int pos;
int top;
Tipo *mem; //cria um ponteiro para Pilha
};
template <class Tipo> Pilha<Tipo>::Pilha(int n)
{
top = -1;
pos= -1;
mem = new Tipo[max = n]; //aloca a memoria conforme tamanho definido em max
}
template <class Tipo> Pilha<Tipo>::~Pilha(void)
{
delete[] mem; //deleta o ponteiro excluindo o recurso
}
template <class Tipo> Tipo Pilha<Tipo>::reseta(void)
{
top=-1; //zera o indice resetando a pilha a tamanho nulo
return 0;
}
template <class Tipo> void Pilha<Tipo>::insere(Tipo e)
{
if( !cheia() ) mem[++top] = e;
}
template <class Tipo> Tipo Pilha<Tipo>::remove(void)
{
if( !vazia() ) return mem[top--];
}
template <class Tipo> Tipo Pilha<Tipo>::topo(void)
{
if( !vazia() ) return mem[top];
else return 0;
}
template <class Tipo> Tipo Pilha<Tipo>::anterior(void)
{
if( !vazia() ) return mem[top-1];
else return 0;
}
template <class Tipo> bool Pilha<Tipo>::vazia(void)
{
if(top==-1)return true;
else return false;
}
template <class Tipo> bool Pilha<Tipo>::cheia(void)
{
if(top==max-1)return true;
else return false;
// PORQUE NAO FUNCIONA TERNARIO top == max -1 ? return true : return false;
}
template <class Tipo> Tipo Pilha<Tipo>::exibe(void)
{
int count=top;
if(!vazia())for(;count>-1;count--)cout << mem[count];// << \" Posição=\" << count << endl;
else cout << \"Pilha vazia\" << endl;
return 0;
}
// FUNCAO RECURSIVA EXIBIÇÃO
template <class Tipo> Tipo Pilha<Tipo>::exibir(void)
{
if(pos<0)pos=top; //inicializa na entrada da chamada
//pos>0 ? cout << mem[pos--],exibir() : return 0; //no final pos=-1 condição inicial
}
/***** FIM pilha.h
/****** TEMPLATES GENERICOS **** Template.h
#ifndef TEMPLATE_H_INCLUDED
#define TEMPLATE_H_INCLUDED
template <class T, int N>
int vetorsize( T (&tab)[N] ) { // aplicação => int x= vetorsize(array variavel);
return N; //retorna o tamanho do array
}
// Somatoria dos elementos
template <class T, int N>
T somatoria(T (&vetor)[N]){
int register c;
T acum=0; //cria variavel do mesmo tipo da chamada
for(c=0;c<N;c++)acum+=vetor[c];
//printf(\"\\nTAM %d vetor=%d acum=%d \",N,vetor[c],acum);
return acum;
}
//******************* COM RECURSÃO ***************************
// somatoria dos elementos com recursão chamada acumulado(array, elementos a somar);
template <class T, int N>
T acumulador(T (&vetor),int k){
int register c=N;
T acum=NULL; //cria variavel do mesmo tipo da chamada com valor NEUTRO
if(k < vetorsize(&vetor))acum+=acumulador(&vetor,k++);
else return acum;
// o que esta errado no ternario
// k < vetorsize(&vetor) ? acum+=acumulador(&vetor,k++),return acum;
}
//Encontra o maior valor
template <class K, int N>
K maior(K (&vetor)[N]){
int register c ;
K ve[0]; //cria variavel do mesmo tipo da chamada com valor NEUTRO
ve[0]=vetor[0]; //
for(c=0;c<N;c++){
if(vetor[c]>ve[0])ve[0]=vetor[c];
}
return ve[0];
}
//Encontra o menor valor
template <class K, int N>
K menor(K (&vetor)[N]){
int register c ;
K ve[0]; //cria variavel do mesmo tipo da chamada com valor NEUTRO
ve[0]=vetor[0]; //
for(c=0;c<N;c++){
if(vetor[c]<ve[0])ve[0]=vetor[c];
}
return ve[0];
}
/******************* Fim Template.h
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Alguma pessoa pode me ajudar com drriver Core i3 7020u (Debian 12)? (2)
Mikrotik não mostra bytes nem packtes (1)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código [RESOLVID... (4)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta