#include <iostream>
using namespace std;
class No{
public:
char dado;
No *next;
No(char item, No *ptr= NULL){
dado=item;
next=ptr;
}
};
class pilha
{
public:
pilha();
char top();
char pop();
void push(char);
char topAndPop();
void printPilha();
bool pilhaVazia();
protected:
private:
No *topo;
};
pilha::pilha(){
topo = NULL;
}
bool pilha::pilhaVazia(){
return topo == NULL;
}
void pilha::push(char value){
topo = new No(value,topo);
}
void pilha::printPilha(){
if(pilhaVazia()){
cout << endl << " PILHA VAZIA" << endl;
}else{
No *aux;
aux = topo;
while(aux->next != NULL){
cout << endl << " EMPILHANDO: " << aux->dado << endl;
aux = aux->next;
}
}
}
pilha obj;
void getExpression(){
string expressao;
int tamExpressao,cont = 0;
char vet[10];
cout << endl << " -------------------------------------" << endl;
cout << " CALCULADORA " << endl;
cout << " -------------------------------------" << endl;
cout << " DIGITE A EXPRESSAO QUE O RESULTADO E COMIGO: ";
expressao = "((1+2)*4)+3";
tamExpressao = expressao.size();
while(tamExpressao != 0){
if((expressao[tamExpressao] == '(') || (expressao[tamExpressao] == ')')){
tamExpressao--; // IGNORA
}else{
if((expressao[tamExpressao] == '+') || (expressao[tamExpressao] == '*') || (expressao[tamExpressao] == '/')){
vet[cont] = expressao[tamExpressao];
cont++;
tamExpressao--; // CALCULA
}else{
obj.push(expressao[tamExpressao--]); // INSERIR NO TOPO
}
}
}
cont--;
cout << endl;
for(cont; cont >= 0; cont--){
cout << endl << " OPERADORES: " << vet[cont] << endl;
}
}
int main() {
getExpression();
obj.printPilha();
return 0;
}