题目描述

对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。

输入

输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。

输出

求该后缀式所对应的算术表达式的值,并输出之。

示例输入

59*684/-3*+#

示例输出

57

#include <stdio.h>
#include<stdlib.h>
#define maxstack 1000
#define stacknum 1000
typedef struct
{
    int *top,*base;
    int stacksize;
}stack;
void Initstack(stack &s)//栈的初始化;
{
    s.base=(int *)malloc(maxstack*sizeof(int));
    if(!s.base) exit(0);//栈溢出;
    s.top=s.base;
    s.stacksize=maxstack;
}
void push(stack &s,char e)//进栈;
{
    if(s.top-s.base>=s.stacksize)
    {
        s.base=(int *)realloc(s.base,(maxstack+stacknum)*sizeof(int));
        if(!s.base) exit(0);//栈溢出;
        s.top=s.base+s.stacksize;
        s.stacksize+=stacknum;
    }
    s.top++;//栈顶元素为e;
    *s.top=e;
}
int Empty(stack &s)//判断是否为空栈;
{
    if(s.base==s.top)
        return 1;
        return 0;

}
void Pop(stack &s)//出栈;
{
    if(!Empty(s))
        s.top--;

}
void print(stack &s)
{//、栈内元素的输出;
    while(s.top!=s.base)
    {
        printf("%c",*s.top);
        Pop(s);
    }
    printf("\n");
}
void cal(stack &s,char st[],int n)//由栈的后缀式求值
{
    int i,pr,la;
    int ch;
    for(i=1;i<=n;i++)
    {
        if(st[i]>='1'&&st[i]<='9')//数字进栈;
        {
            ch=(st[i]-'0');
            push(s,ch);
        }
        else if(st[i]=='+')//+号栈内两个数出栈计算再进栈;
        {
            pr=*s.top;
            s.top--;
            la=*s.top;
            *s.top=pr+la;
        }
        else if(st[i]=='*')
        {
            pr=*s.top;
            s.top--;
            la=*s.top;
            *s.top=pr*la;
        }
        else if(st[i]=='-')
        {
            pr=*s.top;
            s.top--;
            la=*s.top;
            *s.top=la-pr;
        }
        else if(st[i]=='/')
        {
            pr=*s.top;
            s.top--;
            la=*s.top;
            *s.top=la/pr;
        }
    }
    printf("%d\n",*s.top);
}
int main()
{
    char ch,st[10000];
    int i=0;
    stack s;//栈的定义
    Initstack(s);//栈的初始化;
    while(~scanf("%c",&ch))
    {
        if(ch!='#')
            {
                  i++;
                  st[i]=ch;
            }
         else
                break;
    }
    cal(s,st,i);
    return 0;
}

数据结构实验之栈三:后缀式求值相关推荐

  1. SDUT 2133 数据结构实验之栈三:后缀式求值

    后缀式求值的方法参见我的另一篇文章 把运算符变成表达式 1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 ...

  2. php表达式求值,PHP实现基于栈的后缀表达式求值功能

    本文实例讲述了PHP实现基于栈的后缀表达式求值功能.分享给大家供大家参考,具体如下: 后缀表达式概述 后缀表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左 ...

  3. PTA7-4 后缀式求值 (25分) (题目 + 代码 + 详细注释 + 坑点分析)

    我们人类习惯于书写"中缀式",如 3 + 5 * 2 ,其值为13. (p.s. 为什么人类习惯中缀式呢?是因为中缀式比后缀式好用么?) 而计算机更加习惯"后缀式&quo ...

  4. 基于栈的后缀表达式求值(洛谷P1449题题解,Java语言描述)

    题目要求 P1449题目链接 分析 给出后缀表达式求值,就相当于没了括号,而且很直接. 我们需要使用栈结构来完成任务. Java原装的栈使用了很多synchronized,导致性能不佳,但我们也就将就 ...

  5. 数据结构实验之栈与队列三:后缀式求值

    Description 对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值. Input 输入一个算术表达式的后缀式字符串,以'#'作为结束标志. Output ...

  6. C - 数据结构实验之栈与队列三:后缀式求值

    Description 对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值. Input 输入一个算术表达式的后缀式字符串,以'#'作为结束标志. Output ...

  7. SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式

    数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...

  8. 使用栈解决的一类经典问题:表达式转换及求值;中缀表达式;前缀表达式,后缀表达式,中缀转前缀;中缀转后缀;后缀表达式求值;波兰式,逆波兰式

    文章目录 背景知识 表达式转换问题(考研经典) 一:手工转换 (1)中缀转前缀和中缀转后缀 (2)前缀转中缀和后缀转中缀 二:用栈实现表达式转换 (1)中缀转后缀 (2)中缀转前缀 表达式计算问题(使 ...

  9. 算符优先文法,中缀式求值,栈的典型应用

    栈,是比较基础,应用比较广的一种数据结构,栈和队列都可以看成是比较特殊的一些链表,其最突出的特性就是先进后出.虾米阿尼是一个比较常见的中缀表达式求值的应用,当然中缀式到后缀式的转化也是可以实现的. 中 ...

最新文章

  1. 赋能云HBase备份恢复 百T级别数据量备份恢复支持
  2. MsSQL的字段类型
  3. 3台机器配置hadoop集群_Hadoop学习之路(三)Hadoop集群搭建和简单应用
  4. mac按文件名查找文件_如何在Mac上查找和删除大文件
  5. Excel快速选择区域
  6. Vue SEO解决方案
  7. python 函数写商城管理系统
  8. 朴素贝叶斯在文本分类中的应用之 伯努利
  9. 打开 Freetextbox 的 InsertImageFromGallery 及如何接收 ftb.imagegallery.aspx 返回的图片信息...
  10. [转]How to change Atheros AR9285 MAC addr on Win7(Win7下更改Atheros AR9285 MAC地址)
  11. 中国医疗器械行业需求态势及未来前景趋势预测报告(2022-2027年)
  12. 想知道手机配音软件哪个好用吗?一起来看看吧
  13. 在linux上运行迷宫问题,C语言 迷宫问题(堆栈及其应用)
  14. nyoj 1239-引水工程 //并查集
  15. 用php把图片合成视频,图片音乐合成视频 多张图片合成视频|图片合成视频软件...
  16. linux安装mt7601网卡固件,Linux下安装MT7601U无线网卡驱动
  17. 计算一个月有几天并且有几个周六日的小函数
  18. “万物皆可Seq2Seq” | 忠于原文的T5手写论文翻译
  19. 大数据风控之 如何控制贷前风险?
  20. 计算机毕业设计(附源码)python英语单词记忆系统

热门文章

  1. java 打印命令_Java 普通命令行程序main关掉 DEBUG 打印
  2. mysql人事管理系统源代码_人事管理系统(源代码.doc
  3. 红黑树和平衡二叉树的区别_一文搞懂红黑树
  4. python pexpect pxssh scp_python Pexpect 实现输密码 scp 拷贝的方法
  5. mysql 货币显示_在MySQL中以正确的格式显示USD货币记录
  6. python创建access表_Access创建表
  7. 服务器的虚拟内存怎么调,服务器的虚拟内存怎么调才好
  8. 请概述可视化卷积神经网络的中间输出的基本思想。_最详细的卷积神经网络入门指南!...
  9. 华为app安装失败与已安装签名_手机APP为什么总是安装失败
  10. c语言按照姓名查询员工信息,输入10个职工信息,按号码大小排序,再使用查找函数找职工的姓…...