Дано выражение a*b/(a+b). Организовать вычисление этого выражения, используя алгоритм польской записи. Применить системный стек.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "stack.h"
int main ()
{
P_STACK st;
P_NODE nd;
char expr = "*+ab-cd";
char ch;
int a, b, c, d, i, aStep, bStep, cStep, dStep, add, mult, sub, res;
st = (P_NODE) malloc (sizeof (stack));
init_stack (st);
i = 0;
while (expr[i]!='\0')
{
nd=(P_NODE) malloc (sizeof (node));
nd->info=expr[i];
push (st, nd);
i++;
}
printf ("Enter the 4th number:");
scanf ("%d%d%d%d", &a, &b, &c, &d);
while (!is_stack_empty (st))
{
nd = pop (st);
if (!is_stack_empty (st))
switch (nd->info)
{
case 'd':
dStep=d;
break;
case 'c':
cStep=c;
break;
case '-':
sub=cStep-dStep;
break;
case 'b':
bStep=b;
break;
case 'a':
aStep=a;
break;
case '+':
add=bStep+aStep;
break;
case '*':
mult=add*sub;
break;
}
}
res=mult;
printf ("Result: [expr=%d] = [%d]", expr, res);
return 0;
}
Вот библиотека:
#ifndef STACK_H_
#define STACK_H_
typedef struct NODE NODE;
typedef struct NODE *P_NODE;
typedef struct STACK STACK;
typedef struct STACK *P_STACK;
struct NODE
{
int info;
P_NODE next;
} node;
struct STACK
{
int count;
int size;
P_NODE top;
} stack;
typedef enum {false, true} bool;
void init_stack (P_STACK st);
bool is_stack_empty (P_STACK st);
void push (P_STACK st, P_NODE nd);
P_NODE pop (P_STACK st);
void print_stack (P_STACK st);
#endif