南阳 oj 中缀式变后缀式 题目467 数据结构 NYOj



#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#define N 1000

using namespace std;

char s[N];//存储字符串

char str1[N];//存储‘o‘-到‘9‘的字符

char str2[N];//存储运算符

int top1,top2;//利用数组模拟栈

int compare(char x)//优先级比较

{

switch(x)

{

case ‘+‘ :

case ‘-‘ :return 1;

case ‘*‘ :

case ‘/‘ :return 2;

case ‘(‘ :return 0;

default: return -1;

}

}

void zhuan()//转换

{

int k;

top1=-1,top2=-1;//初始化头

scanf("%s",s);

k=strlen(s);

for(int i=0;i<k;i++)

{

if(s[i]>=‘0‘&&s[i]<=‘9‘||s[i]==‘.‘)

{

top1++;

str1[top1]=s[i];

}

else if(s[i]==‘(‘)

{

top2++;

str2[top2]=s[i];

}

else if(s[i]==‘)‘)

{

while(str2[top2]!=‘(‘)

{

top1++;

str1[top1]=‘ ‘;

top1++;

str1[top1]=str2[top2];

top2--;

}

top2--;;

}

else if(s[i]==‘+‘||s[i]==‘-‘||s[i]==‘*‘||s[i]==‘/‘)

{

top1++;

str1[top1]=‘ ‘;

while(compare(s[i])<=compare(str2[top2]))

{

top1++;

str1[top1]=str2[top2];

top1++;

str1[top1]=‘ ‘;

top2--;

}

top2++;

str2[top2]=s[i];

}

}

while(top2!=-1)

{

top1++;

str1[top1]=‘ ‘;

top1++;

str1[top1]=str2[top2];

top2--;

}

top1++;

str1[top1]=‘ ‘;

top1++;

str1[top1]=‘=‘;

top1++;

str1[top1]=‘\0‘;

for(int i=0;i<top1;i++)

printf("%c",str1[i]);

printf("\n");

}

main()

{

int n;

scanf("%d",&n);

while(n--)

{

zhuan();

}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-06 21:51:24

南阳 oj 中缀式变后缀式 题目467 数据结构 NYOj的相关文章

南阳OJ 中缀式变后缀式

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

NYOJ467中缀式变后缀式

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

NYOJ467 中缀式变后缀式 【栈】

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

中缀式变后缀式

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

NYOJ 467 中缀式变后缀式

做了表达式求值那道题之后做的 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更"习惯于"后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式. 输入 第一行输入一个整数n,共有n组测试数据(n<10). 每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式的中缀式,每个运算式都是以"=&quo

栈的应用 — 中缀式转后缀式

由中缀式转换成后缀式,同样使用栈,并运用一些规则来完成.规则介绍如下: 当读到的是操作数,立即输出. 当读到的是运算符,则先从栈中弹出优先级高于自己的运算符(不包含括号),自己入栈. 读到左括号入栈,读到右括号则将栈中元素出栈并输出,直到遇见左括号(括号都不输出). 输入为空后,将栈元素弹出并输出直到栈空. 注意,最后生成的后缀表达式是考虑了运算符优先级的,再配合逆波兰的无优先级概念这一性质,就能够编写出一个带运算符优先级和括号的简易计算器了. 下面是完整的计算器代码,整型四则运算,可加括号.写

[Code] 中缀式转后缀式

[Code] 中缀式转后缀式 概要 对于一个可带括号的中缀四则运算表达式, 例如30 + 4 / 2 或 30 / ( 4 + 2 ), 下面代码将分别转换为对应的后缀表达形式 30 4 2 / + 和 30 4 2 + /. 要求每个 token 之间以若干个空白符隔开, 输入的中缀式为单行. 代码 import java.util.Scanner; import java.util.Deque; import java.util.ArrayDeque; import java.util.Ma

恶补C++ 之 自增、自减操作符前缀式与后缀式的区别

相信很多人刚开始学习编程的时候,也是为这个问题烦恼过吧,前缀式与后缀式,在很久之前,式没有办法区别++和--操作符的前缀和后缀的调用的.不过在C++已经得到了扩展. 然而无论式前缀或者后缀,都只有一个参数.为了解决这个问题,C++规定后缀形式有一个int类型的参数,当函数被调用的时候,编译器传递一个0作为int参数给该函数: class UPInt { public: UPInt& operator++();        // ++前缀 const UPInt operator++(int);

【南阳OJ分类之大数问题】题目+AC代码汇总

声明:题目部分皆为南阳OJ题目,代码部分包含AC代码(可能不止一个)和标程. 由于大数问题用c/c++写比较麻烦,而Java的大数类又很好用,所以基本为java代码.实际上竞赛很少会考大数问题,因为竞赛是比的算法,而不是语言特性,不过很多都是大数据,数据上千万级别的,所以算法又很关键,显然那和这篇博客也没啥关系. 题目不是太难,大家和本人就权当学习或复习下Java吧O(∩_∩)O~. 该分类南阳oj地址:http://acm.nyist.edu.cn/JudgeOnline/problemset