include stdio include stdlib include conio include string class Stack

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
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;
}