注册 登录
编程论坛 数据结构与算法

表达式求值问题

z6439186 发布于 2012-05-31 12:08, 388 次点击
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <stdlib.h>
#define error 0;
#define True  1;
#define size 100;
#define addsize 10
typedef struct
{
    char *top;
    char *base;
    int stacksize;
}sqstack;
int initstack(sqstack &s)//建立
{
    s.base=(char *)malloc(sizeof(char));
    if(!s.base)
        return error;
    s.top=s.base;
    s.stacksize=size;
}
int push(sqstack &s,char e)
{
    if(s.top-s.base>=s.stacksize)
    {
        s.base=(char *)realloc(s.base,(s.stacksize+addsize)*sizeof(char));
        if(!s.base)
            return error;
    }
    s.top=s.base+s.stacksize;
    *s.top++=e;
    s.stacksize+=addsize;
}
char pop(sqstack &s)
{
    if(s.base=s.top)
        return error;
       char m;
       m=*--s.top;
       return m;
}
char gettop(sqstack s)
{  char x;
    if(s.base=s.top)
        return error;
   x=*(s.top-1);
       return x;
}
char m[7][7]=
{'>','>','<','<','<','>','>','>','>','<','<','<','>','>','>''>','>','>','<','>','>','>','>','>','>','<','>','>','<','<','<','<','<','=',' ','>','>','>','>',' ','>','>','<','<','<','<','<',' ','='};
int In(char x)
{
    switch(x)
    {
    case '+':return 1;
        case '-':return 1;
        case '*':return 1;
            case '/':return 1;
                case '(':return 1;
                    case ')':return 1;
                        case '#':return 1;
                        default:return 0;
    }
}
int sswitch(char x)
{
    int m;
    switch(x)
    {
       case '+':return 0;
        case '-':return 1;
        case '*':return 2;
            case '/':return 3;
                case '(':return 4;
                    case ')':return 5;
                        case '#':return 6;
    }
}
char pan(char x,char y)
{
  int i,j;
  i=sswitch(x);
  j=sswitch(y);
  return m[i][j];
}
int preccd(char m,char eta,char n)
{
    int i,j;
    i=atoi(&m);
    j=atoi(&n);
    switch(eta)
    {
    case '+':return i+j;
    case '-':return i-j;
    case '*':return i*j;
    case '/':return i/j;
    }

}
char qiuzhi()
{
    sqstack optr,opnd;//操作数,操作符
    initstack(optr);
    initstack(opnd);
    char a,b,eta,c;
    push(opnd,'#');
    c=getchar();
    while(c!='#'||gettop(opnd)!='#')
    {
        if(!In(c))
        {
            push(optr,c);
        c=getchar();
        break;
        }
        else
            switch(pan(gettop(opnd),c))
        {
            case '<':push(opnd,c);c=getchar();
            case '=':pop(opnd);c=getchar();
            case '>':a=pop(optr);
                b=pop(optr);
                eta=pop(opnd);
                push(optr,(char)preccd(a,eta,b));
        }
    }
return gettop(optr);
   
}
void main()
{
    int m;
    m=(int)qiuzhi();
    printf("%d",m);
}
为什么输出是0啊,希望各位大神帮我看下,详细的告诉我下,有急用,谢谢了
0 回复
1