NYOJ467中缀式变后缀式

逆波兰表达式求值(后缀表达式) 对逆波兰表达式求值,逆波兰式即后缀表达式,计算机容易求值。如23+4— 求值为1。 1、问题描述 读入一个后缀表达式,计算该表达式的值,同时要效验后缀表达式是否正确。 2、操作数的顺序与等价的中缀表达式中操作数的顺序一致; 3、不需要括号 4、操作符的优先级不相关; 5、测试数据 3 4 * 2 - # 输出结果:10.00 立即下载

                                                                        中缀式变后缀式

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 3
描述
人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。
  1. 输入
  2. 第一行输入一个整数n,共有n组测试数据(n<10)。
    每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式的中缀式,每个运算式都是以“=”结束。这个表达式里只包含+-*/与小括号这几种符号。其中小括号可以嵌套使用。数据保证输入的操作数中不会出现负数。
    数据保证除数不会为0
  3. 输出
  4. 每组都输出该组中缀式相应的后缀式,要求相邻的操作数操作符用空格隔开。
  5. 样例输入
  6. 2
    1.000+2/4=
    ((1+2)*5+1)/4=
  7. 样例输出
  8. 1.000 2 4 / + =
    1 2 + 5 * 1 + 4 / =
  9. 解题思路:逆波兰式算法的实现: 
  • *   首先分配两个stack,一个是临时存储运算符的stack s1(包含一个结束符号'#'),一个作为输入逆波兰式的stack s2 
  • *   那么,首先s1开始的时候,push('#') 表示s1的结束标志 
  • *   <1> 如果取出的字符是'(',push('(') 
  • *   <2> 如果取出的字符是')',将距离s1栈顶最近的'('之间的字符依次出栈(不包含'('),然后送入s2,最后,将字符'('出栈 
  • *   <3> 如果取出的是操作数,那么,将完整的操作数push s2(包括浮点数的小数点) 
  • *   <4> 如果取出的是运算符,那么,将该运算符与s1.top()的运算符的优先级比较,如果,大于栈顶运算符, 
  • *       那么push s1,否则,pop s1将运算符送入s2,至到栈顶运算符低于该运算符,那么,将该运算符push s1 
  • *   <5> 重复上面1~4的步骤,直到处理完所有的输入字符 
  • *   <6> 如果取出的字符是'#',那么,将s1的所有的字符pop,然后依次送入s2 
  • *   注意:下面是具体的实现代码,根据题目的要求,使用字符串来模拟stack,实现的效果是一样的。 
  • */ 转自: http://blog.youkuaiyun.com/sevenmit/article/details/9010035

代码如下:# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# define False 0
# define True 1

typedef struct node
 {
  char data;
  struct node *next;
 }LinkStackNode, *LinkStack;

int InitStack(LinkStack *S)           //初始化栈
{
  (*S) = (LinkStack)malloc(sizeof(LinkStackNode));
  (*S)->next = NULL;
  if ((*S) != NULL)
   return True;
  else
   return False;
 }

int Push(LinkStack S, char x)         //进栈
{
  LinkStack temp;
  temp = (LinkStack)malloc(sizeof(LinkStackNode));
  if (temp == NULL)
   return False;
  temp->data = x;
  temp->next  = S->next;
  S->next = temp;
  return True;
 }

int Pop(LinkStack S)        //出栈
{
  LinkStack temp;
  temp = S->next;
  if (temp == NULL)
   return False;
  S->next = temp->next;
  free(temp);
  return True;
 }
int top(LinkStack S)
{
 char e;
 e = S->next->data;
 return e;
}

 //*************************************************************************
int cmp(char ch)
{
 switch(ch)
 {
 case'+':
 case'-':return 1;
 case'*':
 case'/':return 2;
 default:return 0;
 }
}
void fun(char *a, char *b,LinkStack s)
{
 Push(s,'#');
 int i = 0,j  = 0;
 while (i < strlen(a) - 1)
 {
  if (a[i] == '(')
  {
   Push(s,a[i]);
   i++;
  }
  else if (a[i] == ')')
  {
   while (top(s) !=  '(')
   {
    b[j] = top(s);
    b[j+1] = ' ';
    j+=2;
    Pop(s);
   }
   Pop(s);
   i++;
  }
  else if (a[i] == '+' || a[i] == '-' || a[i] == '*' || a[i] == '/')
  {
   while (cmp(top(s)) >= cmp(a[i]))
   {
    b[j] = top(s);
    b[j+1] = ' ';
    j+= 2;
    Pop(s);
   }
   Push(s,a[i]);
   i++;
  }
  else
  {
   while ('0' <= a[i] &&a[i] <= '9' ||a[i] == '.')
   {
    b[j] = a[i];
    i++;j++;
   }
   b[j] = ' ';
   j++;
  }
 }
 while (top(s) != '#')
 {
  b[j] = top(s);
  b[j+1] = ' ';
  j += 2;
  Pop(s);
 }
 b[j] = '=';

}
int main(void)
{
 int n,i;
 char a[1001],b[2002];
 LinkStack S;
 scanf("%d", &n);
 while (n--)
 {
  InitStack(&S);
  scanf("%s", a);
  fun(a,b,S);
  i = 0;
  while (b[i] != '=')
  {
   printf("%c",b[i]);
   i++;
  }
  printf("=\n");
 }
 return 0;
}

表达式求值源代码(逆波兰式) 表达式求值(带括号,+,-,*,/的) 用栈实现,C语言代码 立即下载

相关推荐

HFSS仿真中如何提取最大E/H场强与频率关系曲线

本文详细讲解了在HFSS仿真中提取最大E/H场强与频率关系曲线的完整流程。通过使用场计算器(Field Calculator)和创建场报告,工程师可以准确获得器件在整个频带内的电场或磁场强度峰值,并进一步推导出关键的功率容量曲线,为高功率射频器件(如滤波器、耦合器)的设计提供至关重要的安全评估依据。

ss78901的博客 1099

中缀式变后缀式&&http://acm.nyist.net/JudgeOnline/problem.php?pid=467

描述 人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。 输入 第一行输入一个整数n,共有n组测试数据(n&lt;10)。 每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式的中缀式,每个运算式都是以“=”结束。这个表达...

feiliboos 243

从零开始搭建GD32F103CBT6开发环境:VSCode配置与实战技巧

本文详细介绍了如何从零开始为国产MCU GD32F103CBT6搭建高效的VSCode开发环境。内容涵盖工具链安装、VSCode核心插件配置、工程目录结构规划、关键配置文件编写以及Makefile实战,旨在帮助开发者摆脱传统IDE束缚,利用现代化工具链提升嵌入式开发效率。

weixin_29158413的博客 448

中缀式变后缀式(nyoj 467)

中缀式变后缀式 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。 输入第一行输入一个整数n,共有n组测试数据(n 每组测试数据只有一行,是

23333333 718

Jupyter实战:解决ModuleNotFoundError之xgboost缺失问题

本文详细解析了在Jupyter Notebook中遇到ModuleNotFoundError: No module named 'xgboost'错误的完整解决方案。通过诊断环境、使用pip正确安装xgboost、配置Python路径以及最终验证,帮助用户彻底解决模块缺失问题,并理解Jupyter内核与Python环境的关系,提升问题排查能力。

weixin_29064103的博客 384

DSP在线升级方案:TMS320C6678使用网络或者串口输出升级数据进行固件升级

下面这段先引用创龙的说明 IBL 运行后, 将从 NOR FLASH 或 NAND FLASH 的 0x00080000 地址引导 ELF/BBLOB 格式 用户程序。 当引导 ELF 格式用户程序时, IBL 会解析用户程序头部信息,并根据头部信息 拷贝不同的代码段至指定 CPU 内存地址,然后将 PC 指针跳转至_c_int00, 再运行用户程 序。当引导 BBLOB 格式用户程序时,由于无头部信息, IBL 会将用户程序拷贝至 0x9E000000 (该内存地址为 IBL 代码指定),并将 PC..

ToneChip的专栏,一个传统的嵌入式码农,裸机编程 1943

中缀式转换为后缀式(逆波兰式)方法

对于用低级编程语言是实现对运算式的处理,后缀式(逆波兰式)最为简便。下面是将中缀式(常见运算式)转换为后缀式的算法: 栈底放‘#’,从左至右逐字读取中缀式:    a.当当前字符为数字时,直接输出;   b.当当前字符为"("时,将其压栈;   c.当当前字符为")"时,则弹出堆栈中最上的"("之前的所有运算符并输出,然后删除堆栈中的"(" ;    d.当当前字符为运算符时,则依次弹出

嗯。 1966

实战干货|.NET9 C#上位机:多PLC并发通信+数据防丢+指令精准下发(10台设备实测+踩坑实录)

摘要:本文介绍了一个基于.NET9重构汽车零部件产线10台西门子S7-1200 PLC并发通信的工业级解决方案。针对原有系统存在的同步轮询阻塞、数据丢失、指令重复等问题,采用连接池复用、异步并发控制、超时隔离等技术,实现800ms内完成10台PLC并发采集、零丢包率、100%指令精准下发。方案通过.NET9的ThreadPool调度优化和ValueTask内存管理,将CPU占用控制在15%以内,解决了多PLC通信中的并发冲突、超时扩散等核心痛点,并提供了可直接复用的工业级代码实现。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 455

NYOJ-467 中缀式变后缀式

中缀式变后缀式 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。 输入 第一行输入一个整数n,共有n组测试数据(n 每组测试数据只有一行,是一个长度不超

Hanks软件库 965

OceanBase数据库LSM-Tree存储引擎深度解析:合并写入与压缩优化策略

OceanBase数据库采用创新的LSM-Tree架构设计,通过"基线-增量"分离存储实现高性能。内存中的MemTable处理写入,磁盘上的SSTable存储有序数据,利用多级缓存加速读取。写入时先写日志再更新内存,合并操作将增量数据整合为基线数据以优化查询性能。相比传统B+树引擎,OceanBase在写入吞吐、压缩效率和存储成本方面优势显著,特别适合写入密集型场景。合并操作作为核心机制,通过多种触发方式和执行策略平衡性能与资源消耗。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1342

深入浅出:大型语言模型(LLM)的全面解读

在当今的数字化时代,人工智能技术已经成为各行各业的核心驱动力之一。而在人工智能的领域中,大型语言模型(LLM)作为一种引人瞩目的技术,正在以其强大的语言理解和生成能力引领着一场革命。本文旨在深入浅出地解读大型语言模型,探讨其背后的原理、技术突破、应用场景以及未来发展趋势。

fudaihb的博客 10万+

NYOJ_467 中缀式变后缀式

描述 人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。 输入第一行输入一个整数n,共有n组测试数据(n 每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式的中缀式,每个运算式都是以“=”结束。这个表达式里只包含+-*/与小括号这

老子(道家) 402

C#上位机项目实战(32)——如何防止winform程序因为误操作被关闭

我们在开发的上位机软件运行起来以后,一般在右上角都有一个关闭按钮,正常情况下点击关闭按钮就能关闭软件,但是不排除我们不想关闭软件,但是因为不小心把鼠标点到了关闭按钮,如果这是一个正在生产的机器,突然关闭软件可能会导致产品损坏,那么我们如何去解决这个误操作的问题呢,本文就来讲解解决方案!

qq_34059233的博客 683

NYOJ 467-中缀式变后缀式

题目描述: 人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。 输入描述: 第一行输入一个整数n,共有n组测试数据(n<10)。 每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式的中缀式,每个运算式都是以“=”结束。这个表达式...

G191018的博客 291

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

NYOJ-467 中缀式变后缀式

中缀式变后缀式 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。 输入第一行输入一个整数n,共有n组测试数据(n 每组测试数据只有一行,是

狂飙的蜗牛 的专栏 771

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

nyoj467中缀式变后缀式

中缀式变后缀式 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。 输入第一行输入一个整数n,共有n组测试数据(n 每组测试数据只有一行,是

逆水行舟 888

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

NYOJ467 中缀式变后缀式 【栈】

中缀式变后缀式 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。 输入 第一行输入一个整数n,共有n组测试数据(n 每组测试数据只有

长风的专栏 988

NYOJ 467 中缀式变后缀式

和上午写的那道题基本一样,不同的是,这道题是实数,所以处理数的时候遇到了点问题,刚开始一直想不出来怎么处理,后来和rihkddd打了会乒乓球,回来后立马就想明白了。。。题目: 中缀式变后缀式 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式

1163

NYOJ 467 中缀式变后缀式

中缀式变后缀式 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。 输入第一行输入一个整数n,共有n组测试数据(n 每组测试数据只有一行,是

最初的梦想 486

nyoj 467 中缀式变后缀式 (栈)

中缀式变后缀式 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。 输入第一行输入一个整数n,共有n组测试数据(n<10)。 每组...

devon2014的博客 88

nyoj 题目467 中缀式变后缀式

中缀式变后缀式 时间限制:1000 ms  |            内存限制:65535 KB 难度:3 描述 人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。 输入第一行输入一个整数n,共有n组测试数据(n 每组测试数据只有一

成长ing 382
上一篇: 图的深度优先搜索和广度优先搜索
下一篇: NYOJ257郁闷的C小加(一)
java_oracle_c
博客等级 码龄13年 2粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值