`
yiminghe
  • 浏览: 1461840 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

后缀表达式的javascript转化演示

阅读更多

复习经典算法,原算法:数据结构(用面向对象方法与c++描述) 112页 。


效果:

 

 

演示@google code


代码:

 

<script>
var postfix=function(){
	//栈内优先数
	var isp={
		'(':1,
		'^':7,
		'*':5,
		'/':5,
		'%':5,
		'+':3,
		'-':3,
		')':8		
	};
	
	//栈外优先数
	var icp={
		'(':8,
		'^':6,
		'*':4,
		'/':4,
		'%':4,
		'+':2,
		'-':2,
		')':1
	};
	
	//左括号栈外优先级最高,它一来立即进栈,其栈内优先级最低,便于括号内操作符进栈,其他操作符进栈后优先级都升一,
	//这样可体现出中缀表达式相同优先级的操作符从左向右计算的要求,让位于栈顶的操作符先退栈并输出。
	
	return function(exp){
		//后缀表达式
		var buffer=[];
		//操作符栈
		var stack=[];
		//当前中缀表达式扫描字符
		var el;
		//当前操作符栈栈顶元素
		var top;
		for(var i=0,l=exp.length;i<l;i++) {
			el=exp.charAt(i);
			//数字元素
			if(!isp[el]) {
				buffer.push(el);
				continue;
			}
			if(stack.length===0) {
				stack.push(el);
				continue;
			}
			top=stack[stack.length-1];
			while(isp[top]>=icp[el]) {
				// ( ) 匹配
				if(isp[top] == icp[el]) {
					stack.pop();
					break;
				}
				buffer.push(stack.pop());
				top=stack[stack.length-1];
			}
			
			//不是 ()匹配 ,当前字符如栈
			if(isp[top]!=icp[el]) {
				stack.push(el);
			}
		}
		
		//栈内操作符都出来吧,没数字了
		while(stack.length) {
			buffer.push(stack.pop());
		}
		
		return buffer.join('');
	};
	 
}();

//测试
//abc*de+f^*+h+
alert(postfix("a+b*c*(d+e)^f+h"));
</script>
  • 大小: 3.3 KB
分享到:
评论

相关推荐

    C语言实现中缀表达式转化后缀表达式

    利用C语言实现中缀表达式转化为后缀表达式!!利用栈。

    后缀表达式相关,包括中缀表达式转后缀表达式以及后缀表达式的运算

    (1) 从键盘或文件读入一个合法的算术表达式,输出相应的后缀表达式。后缀表达式中,数据与数据之间加分隔符; (2) 输出正确的计算结果,保留两位小数点; (3) 考虑算法的健壮性,当表达式错误时,要给出错误...

    c++ 计算表达式结果(二叉树、后缀表达式)

    本篇将详细讲解如何使用C++来处理中缀表达式,并通过构建二叉树以及转换为后缀表达式的方式来求解表达式的结果。 首先,我们要理解什么是中缀表达式。中缀表达式是我们在日常生活中最常使用的表达式形式,例如 "2 +...

    后缀表达式求值(c语言版)

    根据给定的文件信息,我们可以总结出以下关于“后缀表达式求值”的详细知识点,主要涉及C语言在数据结构中的应用,特别是栈的应用来解析和计算后缀表达式。 ### 1. 后缀表达式的概念 后缀表达式,也称为逆波兰表示...

    自定义栈中缀表达式转换为后缀表达式并求值

    ### 自定义栈中缀表达式转换为后缀表达式并求值 #### 需求分析与背景 在计算机科学领域,将一个中缀表达式转换为后缀表达式是解决算术表达式求值问题的一种常用方法。通过这种方式可以避免括号带来的优先级问题,...

    中缀表达式转化为后缀表达式算法及后缀表达式算法的实现.doc

    中缀表达式转化为后缀表达式算法及后缀表达式算法的实现 中缀表达式转化为后缀表达式算法是计算机科学中的一种常见算法,用于将中缀表达式转化为后缀表达式。该算法广泛应用于编译器、解释器、计算器等领域。 中缀...

    判别表达式是否是后缀表达式并将转化为前缀表达式

    通过创建后缀树来实现输入的表达式是否是判别后缀表达式,并将正确的后缀表达式转化为其相应的前缀表达式

    C++后缀表达式转前缀表达式

    C++后缀表达式转前缀表达式 C++程序中,后缀表达式转换为前缀表达式是一种常见的操作。为了完成这个操作,我们需要使用栈数据结构来存储和处理表达式中的操作符和操作数。 首先,让我们了解一下什么是后缀表达式和...

    获取键盘输入一个中缀表达式,将它转换成后缀表达式,并输出结果

    ### 获取键盘输入一个中缀表达式,将它转换成后缀表达式,并输出结果 #### 知识点一:中缀表达式与后缀表达式的概念 - **中缀表达式**:通常我们书写的数学表达式就是中缀表达式,如`3 + 4 * 2`。在中缀表达式中,...

    数据结构的中缀表达式转后缀表达式使用C++实现

    本文将详细讨论如何使用C++实现数据结构中的一个重要概念——中缀表达式转化为后缀表达式,也被称为逆波兰表示法。这个过程涉及到堆栈这一重要的数据结构。 中缀表达式是我们日常生活中常见的数学表达式形式,例如 ...

    数据结构-实验3-后缀表达式求值.doc

    后缀表达式,又称逆波兰表示法,是一种不使用括号的数学表达式表示方法,主要依靠运算符出现在操作数之后这一特性来确定运算顺序。在计算机科学中,后缀表达式常用于利用栈实现表达式的求值。在这个实验中,目标是...

    java堆栈的应用--中缀表达式转换成后缀表达式和计算

    在本项目中,“java堆栈的应用--中缀表达式转换成后缀表达式和计算”具体涉及到了两个主要知识点:中缀表达式的转换与后缀表达式的计算。 1. **中缀表达式**:这是我们常见的数学表达式形式,如 `2 + 3 * 4`,其中...

    后缀表达式(逆波兰式)求值

    后缀表达式(逆波兰式)求值 本资源主要介绍了后缀表达式(逆波兰式)求值的实现,通过使用栈数据结构来实现逆波兰式求值。下面是相关知识点的详细解释: 1. 栈数据结构 栈是一种后入先出(Last In First Out,...

    将中缀表达式转换为后缀表达式并求值实验报告

    在本实验报告中,主要涉及的是中缀表达式与后缀表达式的转换以及求值问题。中缀表达式是我们常见的运算符位于操作数之间的表达形式,例如 `6+3*(6+5)`,而后缀表达式又称逆波兰表示法,其中运算符位于其操作数之后,...

    后缀表达式计算求值实例

    后缀表达式,又称逆波兰表示法,是一种数学表达式的一种表示方式,它在计算机科学中有着广泛的应用,尤其是在编译原理和算法设计中。在后缀表达式中,操作符位于其操作数之后,这与我们常见的中缀表达式(如2 + 3 * ...

    后缀表达式转换为前缀

    "后缀表达式转换为前缀" 在编程语言中,后缀表达式是一种常见的表达式形式,它将运算符置于操作数之后,例如2 3 +。将后缀表达式转换为前缀表达式是编程语言基础课程中的一个重要题目,本文将详细介绍如何使用栈来...

    后缀表达式计算

    后缀表达式,又称逆波兰表示法,是数学表达式的一种表示形式,它在计算领域具有重要的应用价值,尤其在算法设计和计算机科学中。后缀表达式的主要优点在于其简洁性和易于用栈来实现计算,这使得它成为解决计算问题的...

    后缀表达式求值 栈

    后缀表达式,又称逆波兰表示法,是一种用于表示数学表达式的方式,它将运算符放在操作数之后,使得表达式求值的过程可以利用栈这种数据结构来简化。栈是一种具有“后进先出”(LIFO)特性的数据结构,非常适合处理这...

    STL-后缀表达式的计算

    ### STL-后缀表达式的计算 #### 知识点概览 本文将详细介绍如何利用C++标准模板库(STL)中的容器与算法实现后缀表达式的计算,并且支持包括括号在内的复杂数学表达式。文章的核心内容包括: 1. **后缀表达式的概念...

    数据结构课程设计实验报告(后缀表达式的计算).

    提供了一个示例,演示了程序如何正确处理中缀表达式“5+6*6-9-8”,并输出相应的后缀表达式和计算结果。 7. **算法的分析和评价**: 学生对实验的成功感到满意,认为增加了中缀转后缀的功能,使得操作更加简便,...

Global site tag (gtag.js) - Google Analytics