中缀转后缀的数组实现(只有加减乘除

#include <stdio.h>
int youxian(char a)
{
	if(a==‘+‘||a==‘-‘)
	return 1;
	if(a==‘*‘||a==‘%‘)
	return 2;
}
int main(void)
        {
        	char stack[20];
        	int jishu=0;
        	char b;

        	while((b=getchar())!=‘\n‘)
			    {
        		  if(b>=33&&b<=47)
        		    {
        		    	if(jishu==0)
        		    	   {
        		    	   	stack[jishu]=b;
        		    	   	jishu++;
						   }
						else
						   {
						   	if(youxian(stack[jishu-1])>=youxian(b))
						   	   {
								  printf("%c",stack[jishu-1]);
								  stack[jishu-1]=b;}
						    else stack[jishu++]=b;

						   }

					}
					else printf("%c",b);
			    }
			    while(jishu>0)
			     {
			     	printf("%c",stack[jishu-1]);
			     	jishu--;
				 }
		 }
时间: 2024-08-24 16:38:58

中缀转后缀的数组实现(只有加减乘除的相关文章

栈的应用---中缀变后缀

中缀表达式 运算符号在数字中间 后缀表达式 运算符号在数字之后 计算机计算计算的是后缀表达式 中缀变后缀举例 5 + 3  ->  5 3 + 1 + 2 * 3  -> 1 2 3 * + 9 + (3 - 1) * 5 -> 9 3 1 - 5 * + 中缀变后缀算法 ···遍历中缀表达式中的数字和符号 ·········对于数字:直接输出 ·········对于符号: ······················左括号:进栈 ······················符号    

PTA-7-20 表达式转换(中缀转后缀,带括号,负数,小数转换)

本题考点:中缀表达式转后缀表达式. 难点: 带有小数的数字 数字可能带有正负号 题目描述: 算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间.请设计程序将中缀表达式转换为后缀表达式. 本题的测试点如下: 输入 输出 说明 2+3*(7-4)+8/4 2 3 7 4 - * + 8 4 / + 正常测试6种运算符 ((2+3)*4-(8+2))/5 2 3 + 4 * 8 2 + - 5 / 嵌套括号 1314+25.5*1

【信息学奥赛一本通】第三部分_栈 ex1_4cale (中缀转后缀7符号)

其实这个中缀转后缀是费了很大功夫的,明白算法后第一次实现花了近三小时ORZ #include <stdio.h> #include <string.h> #include <ctype.h> char Mstr[511],Msta[511] = {'@'},Bstr[511]; int sta[511]; const short list[4][4] = {{0,-1,1,1},{1,0,1,1},{1,1,1,-2},{-1,-1,2,1}}; int level (

【转】前缀、中缀、后缀表达式

它们都是对表达式的记法,因此也被称为前缀记法.中缀记法和后缀记法.它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前:中缀和后缀同理. 举例: (3 + 4) × 5 - 6 就是中缀表达式 - × + 3 4 5 6 前缀表达式 3 4 + 5 × 6 - 后缀表达式 中缀表达式(中缀记法) 中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间.中缀表达式是人们常用的算术表示方法. 虽然人的大脑很容易理解与分析中缀表达式,但对计

将中缀转换为后缀并求值

一.中缀转后缀 中缀转后缀口诀: 1.遇到操作数,直接输出. 2.当栈为空时,遇到操作符直接入栈. 3.遇到左括号,将其入栈 4.遇到右括号,执行出栈,输出出栈的元素,直到弹出左括号,(左右括号不输出). 5.遇到运算符时,依次弹出所有优先级大于或等于该运算符的栈顶元素(到输出)然后将该元素入栈,否则直接入栈. 6.最终栈顶元素依次输出. 中缀表达式“9+(3-1)*3+10/2”转化为后缀表达式“9 3 1-3*+ 10 2/+” 下面我们来具体看看这个过程. 1. 初始化一空栈,用来对符号进

[栈和队列]从中缀向后缀转换表达式

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #define INIT_STACK_SIZE 100 5 typedef struct 6 { 7 char * chOperator; 8 int dwtop; 9 }OPND; 10 11 void InitStack(OPND *); 12 char Pop(OPND *); 13 void Push(OPND *,char );

【C++】朝花夕拾——中缀转后缀

对于简单的四则运算而言,后缀表达式可以通过使用栈(stack)快速算出结果 ==================================我是分割线==================================== 后缀的定义: e.g. 2 + 3 -> 2 3 + 2 + 3 * 4 -> 2 3 4 * + 应用栈来计算后缀表达式: e.g. 后缀表达式 6 5 2 3 + 8 * + 3 + * 遍历:     6     push(6)            stack:

深入理解前缀、中缀、后缀表达式

1.我们首先来看一下,什么是前缀.中缀.后缀表达式: 中缀表达式: 2 - 3 * 4 后缀表达式:2 3 4 * - 前缀表达式:- 2 * 3 4 简单介绍下,前中后的划分依据为两个数字的操作符处于两个数字的前面,中间还是后面,其中中缀表达式为我们日常生活中常见的表达形式. 2.重要操作过程 后缀表达式求值过程: 从左到右扫描后缀表达式:遇到数字就将其压入栈中:遇到操作符,则取出栈顶的两个元素(栈顶元素为a, 另一个为b),并计算b 操作符 a的取值,并将结果重新压入栈中.扫描整个表达式结束

java四则运算----前缀、中缀、后缀表达式

接到一个新需求,需要实现可配置公式,然后按公式实现四则运算. 刚拿到需求,第一反应就是用正则匹配‘(’,‘)’,‘+’,‘-’,‘*’,‘/’,来实现四则运算,感觉不复杂. 然后开始coding.发现有点复杂,然后各种for,感觉非常不爽,于是问网上搜了下,发现一种叫波兰式的计算方法,瞬间茅塞顿开. http://blog.csdn.net/antineutrino/article/details/6763722 以下为原文引用 它们都是对表达式的记法,因此也被称为前缀记法.中缀记法和后缀记法.