| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 607 人关注过本帖
标题:后缀表达式计算
取消只看楼主 加入收藏
tangtangt
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:146
注 册:2012-1-22
结帖率:100%
收藏
 问题点数:0 回复次数:1 
后缀表达式计算
用栈写的一个简单的后缀表达式求值。水平有限,没有考虑错误数据输入问题。而且只考虑除法得到整数值的情况(不能整除的话,我只能想到变量全改成double型来处理)
希望各位能提出更好的方法和建议!!!
程序代码:
#include <stdio.h>
#include <malloc.h>
#include <string.h>

typedef struct Stack
{
    int data;
    struct Stack * next;
}* stack;

stack push( stack st, int val );
stack pop( stack st ); 
int peep( stack st ); //得到栈顶元素
int isop( char ch ); //判断是否运算符



int main()
{
    stack s = NULL;
    int result,temp,first,second,i;
    char str[20];
    
    printf("输入后缀表达式(数字先用字母表示):");
    scanf("%s",str);

    for( i = 0; i < strlen(str); i++ )
    {
        if( !isop(str[i]) )                   //对于非运算符,入栈
        {
            printf("输入%c的值:",str[i]);
            scanf("%d",&temp);
            s = push( s, temp );
        }
        else
        {                                   //遇到运算符,获取栈中最上面两个元素,并计算,所得结果入栈
            second = peep(s);
            s = pop(s);
            first = peep(s);
            s = pop(s);
            
            if( '+' == str[i] )
            {
                result = first + second;
            }
            else if( '-' == str[i] )
            {
                result = first - second;
            }
            else if( '*' == str[i] )
            {
                result = first * second;
            }
            else if( '/' == str[i] )
            {
                result = first/second;
            }

            s = push( s,result );
        }
    }
    
    printf("结果是%d",peep(s));
    return 0;
}

stack push( stack st, int val )   //头插法建立栈,新建结点next指向原来的首节点,成为新的首节点,并作为函数返回值
{
    stack new_st = (stack)malloc(sizeof(struct Stack));
    new_st->data = val;
    new_st->next = st;
    return new_st;
    
}


stack pop( stack st )
{
    stack temp;
    if( NULL == st )
    {
        printf("空栈");
        return NULL;
    }
    else
    {
        temp = st->next;
        free(st);
        return temp;
    }

}

int isop( char ch )
{
    if( ch=='+' || ch=='-' || ch=='*' || ch=='/' )
        return 1;
    else
        return 0;
}

int peep( stack st)
{
    if( NULL == st )
    {
        printf("空栈");
        return NULL;
    }
    else
    {
        return st->data;
    }
        
}


运行示例:输入后缀表达式(数字先用字母表示): ab+cd-/
输入a的值 80
输入b的值 20
输入c的值 5
输入d的值 1
结果是25
搜索更多相关主题的帖子: double 计算 表达式 color 
2012-04-19 18:28
tangtangt
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:146
注 册:2012-1-22
收藏
得分:0 
人工置顶。。。
2012-04-20 08:41
快速回复:后缀表达式计算
数据加载中...
 
   



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

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