#include #include #include #include class Stack { private: struct Element { int data; Element *next; } * pstack; public: Stack (); ~Stack (); int Empty (void); int Top (void); int Pop (void); int Push (int x); }; Stack::Stack () { pstack = NULL; } Stack::~Stack () { Element * temp; while (pstack) { temp = pstack; pstack = pstack->next; delete temp; } } int Stack::Empty() { if (pstack == NULL) return 1; else return 0; } int Stack::Top () { return pstack->data; } int Stack::Pop () { Element *del = pstack; int temp = pstack->data; pstack = pstack->next; delete del; return temp; } int Stack::Push (int x) { Element *ins = new Element; if (ins==NULL) return 0; ins->data = x; ins->next = pstack; pstack = ins; return 1; } int main(void) { Stack MyStack; char eq[100]={},*pch; gets(eq); int a,b; strrev(eq); pch = strtok(eq," "); while (pch != NULL) { _strrev(pch); if (pch[0]>='0' && pch[0]<='9') MyStack.Push(atoi(pch)); else { switch(pch[0]) { case '*': a=MyStack.Pop(); b=MyStack.Pop(); MyStack.Push(a*b); break; case '/': a=MyStack.Pop(); b=MyStack.Pop(); MyStack.Push(a/b); break; case '+': a=MyStack.Pop(); b=MyStack.Pop(); MyStack.Push(a+b); break; case '-': a=MyStack.Pop(); b=MyStack.Pop(); MyStack.Push(a-b); break; default: break; } } pch = strtok (NULL, " "); } printf("Result : %d ", MyStack.Top()); _getch(); return 0; }