Пример стека: вычисление значения формулы - EcsFlash/DataTypes GitHub Wiki
Исходный код - тут(не могу быть точно уверен в правильной работе кода, поскольку у меня не работает преобразование в постфиксную запись(upd - работает))
Я использовал всего 1 стек, хотя можно и возможно нужно использовать 2 стека.
Использую функцию преобразования в постфиксную запись, получаю строку. Циклом прохожусь по ней, если встречаю число, то кидаю его в стек, иначе, в зависимости от типа оператора, выполняю арифметические операции(я удаляю 2 последних операнда, и закидываю в стек их результат)
#include "InfixToPostfix.cpp"
#include "StackList.h"
using namespace std;
inline int Calculator_formula()//предполагаем, что подается заведомо верная строка(иначе можно писать до посинения)
{
StackList<int> stack;
string str = InfixToPostfix();
for (int i = 0;i < (int)str.length();i++)
{
if (str[i] != '+' && str[i] != '-' && str[i] != '/' && str[i] != '*') {
stack.addElem(str[i] - '0');
}
else if(!stack.isEmpty())
{
int sum = stack.peek();
stack.removeElem();
switch (str[i])
{
case('+'):
sum += stack.peek();
stack.removeElem();
break;
case('-'):
sum -= stack.peek();
stack.removeElem();
break;
case('*'):
sum *= stack.peek();
stack.removeElem();
break;
case('/'):
sum /= stack.peek();
stack.removeElem();
break;
}
stack.addElem(sum);
}
}
return stack.peek();
}