| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1198 人关注过本帖
标题:数据结构表达式求值问题
只看楼主 加入收藏
星野
Rank: 2
来 自:河北
等 级:论坛游民
帖 子:73
专家分:26
注 册:2016-4-13
结帖率:82.35%
收藏
 问题点数:0 回复次数:1 
数据结构表达式求值问题
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef struct
{
    ElemType *base;
    ElemType *top;
    int stacksize;
}SqStack;

int InitStack(SqStack *s)
{
    s->base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
    if(!s->base)
        return ERROR;
    s->top=s->base;
    s->stacksize=STACK_INIT_SIZE;
    return OK;
}
int Push(SqStack *s,char e)
{
    if(s->top-s->base>=s->stacksize)
    {
        s->base=(ElemType *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(ElemType));
        if(!s->base)
            return ERROR;
        s->top=s->base+s->stacksize;
        s->stacksize+=STACKINCREMENT;
    }
    *(s->top)=e;
    s->top++;
    return OK;
}
int Pop(SqStack *s,char *e)
{
    if(s->top==s->base)
    {
        return ERROR;
    }
    *e=*--(s->top);
    return OK;
}
char GetTop(SqStack s)
{
    if(s.top==s.base)
    {
        return ERROR;
    }
    else
    {
        return (*(s.top-1));
    }
}
int In(char c)//判断c是否为操作符
{
    switch(c)
    {
    case '+':
    case '-':
    case '*':
    case '/':
    case '(':
    case ')':
    case '#':
        return OK;
        break;
    default:return ERROR;
    }
}
char Priority(char t1,char t2)
{
    char f;
    switch(t2)
    {
    case '+':
    case '-':if(t1=='('||t1=='#')
                 f='<';
        else
            f='>';
        break;
    case '*':
    case '/':if(t1=='*'||t1=='/'||t1==')')
                 f='>';
        else
            f='<';
        break;
    case '(':if(t1==')')
                 return ERROR;
        else
            f='<';
        break;
    case ')':switch(t1)
             {
    case '(':f='=';
        break;
    case '#':return ERROR;break;
    default:f='>';
             }
    case '#':switch(t1)
             {
    case '#':f='=';break;
    case '(':return ERROR;break;
    default:f='>';
             }
    }
    return f;
}
int operate(int a,char theta,int b)
{
    int c;
    switch(theta)
    {
    case '+':
        c=a+b;
        break;
    case '-':
        c=a-b;
        break;
    case '*':
        c=a*b;
        break;
    case '/':
        c=a/b;
        break;
    }
    return c;
}
char final()
{
    SqStack OPTR,OPND;
    char c,x,a,b;
    int i,j,e;
    InitStack(&OPTR);
    Push(&OPTR,'#');
    InitStack(&OPND);
    printf("请输入表达式\n");
    c=getchar();
    while(c!='#'||GetTop(OPTR)!='#')
    {
        if(!In(c))
        {
            Push(&OPND,c);
            c=getchar();
        }
        else
        {
            switch(Priority(GetTop(OPTR),c))
            {
            case '<':Push(&OPTR,c);c=getchar();
                break;
            case '=':Pop(&OPTR,&x);c=getchar();
                break;
            case '>':Pop(&OPTR,&x);Pop(&OPND,&a);Pop(&OPND,&b);
                i=atoi(&a);j=atoi(&b);
                e=operate(j,x,i);
                itoa(e,&a,10);
                Push(&OPND,a);
                break;
            }
        }
    }
    return (GetTop(OPND));

}
int main()
{
    char a;
    a=final();
    printf("%c",a);
    printf("\n");
}

结果为什么不对啊?
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 表达式 
2016-10-14 16:58
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
程序代码:
int Push(SqStack *s,char e)
{
    if(s->top-s->base>=s->stacksize)
    {
        s->base=(ElemType *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(ElemType));
        if(!s->base)
            return ERROR;
        s->top=s->base+s->stacksize;
        s->stacksize+=STACKINCREMENT;
    }
    *(s->top)=e;
    s->top++;
    return OK;
}

进来就判断是怎么想的啊?我也是菜鸟,能否解释下呢

剑栈风樯各苦辛,别时冰雪到时春
2017-06-11 18:07
快速回复:数据结构表达式求值问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023592 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved