评估后缀表示法

时间:2014-10-21 20:45:19

标签: c stack postfix-notation

我正在做运动,但我坚持到最后一步。 我必须在C中使用堆栈来评估后缀表示法。 代码:

#include<stdio.h>
#include<stdlib.h>
#define MAX 100

typedef struct 
{
    int info;
}tipElement;

typedef struct 
{
    tipElement magacin [MAX];
    int vrv;
}tipMagacin;

tipMagacin postfixStack;

void Inicijalizacija(tipMagacin *Mag)
{
    (*Mag).vrv = -1;    //warehouse is empty
}
int Prazen(tipMagacin Mag)
{
    return(Mag.vrv == -1);    //returns true if the warehouse is empty
}
int Poln(tipMagacin Mag)
{
    return(Mag.vrv == MAX-1);    //returns true if the warehouse is full
}
void Push(tipMagacin *Mag, tipElement Element)
{
    if (Poln(*Mag)) printf("Warehouse is full\n");    //if it is full report an error
        else 
        {
           (*Mag).vrv++;                                       //next position in the warehouse
           (*Mag).magacin[(*Mag).vrv].info = Element.info;     //put an element
        }
}
void Pop(tipMagacin *Mag, tipElement *Element)
{
    if (Prazen(*Mag)) printf("Warehouse is empty\n");            //if it is empty report an error
        else 
        {
           (*Element).info = (*Mag).magacin[(*Mag).vrv].info;    //read the last element
           (*Mag).vrv--;                                         // delete it                             
        }
}   

int evaluate(int op1, int op2, char operate) {
   switch (operate) {
      case '*': return op2 * op1;
      case '/': return op2 / op1;
      case '+': return op2 + op1;
      case '-': return op2 - op1;
      default : return 0;
   }
}


int evaluatePostfix (char *izraz, int n) 
{
    tipMagacin *Mag;
    tipElement element;
    tipElement go,z;
    int i=0;
    int op2;
    char ch;
    int value;
    while (i < n) {
        element.info = izraz[i];
        if(isdigit(element.info)) 
        {
        Push(&postfixStack, element);
        }
        else
        { 
         z=Pop(&postfixStack, &go);
             op2=1;
         value = evaluate(z,op2,ch);
         Push(Mag,value);
        }

        i++;
} 

return value;
}

我的代码在这里工作正常:

   else
        { 
        op1=Pop(&postfixStack, &go);
        op2=Pop(&postfixStack, &go);
        value = evaluate(op1,op2,element.info);
        Push(&postfixStack, value);
        }

        i++;
} 

return value;
} 

问题是:错误:void值不应该被忽略,因为它应该是 我的Push和Pop函数是无效的,我需要将我从堆栈中删除的值放入某个int变量然后我计算它们。把它放在某些原因我不知道。 有人帮吗?

0 个答案:

没有答案