数据结构--堆栈--利用堆栈计算后缀表达式

本文介绍了后缀表达式的定义及其相对于中缀表达式的优势,主要阐述了后缀表达式的求值规则,并提供了一个利用堆栈计算后缀表达式的Go语言实现。通过具体的计算过程,如'(6+4)/2.5+(5*2)',展示了后缀表达式如何简化计算。
摘要由CSDN通过智能技术生成

后缀表达式的定义

以人类的思维,中缀表达式是正常的表达式形式,因为我们已经熟悉了各种运算符号的优先级,知道在一个表达式中第一个求哪一部分的值,最常见的就是先求括号内部,然后再求括号外部,但是这种求值顺序在计算机看来是很麻烦的,最好的办法是我们输入给计算机的表达式不需要知道操作符优先级,计算机只管按照我们输入的表达式从左到右求值即可,这就要用后缀表达式来实现。后缀表达式是针对中缀表达式而言的,大致可以理解为操作符在两个操作数之后,并不是像中缀表达式那样两个操作数之间必须有一个操作符,后缀表达式最大的特点就是没有必要知道任何运算符的优先规则,如下就是一个后缀表达式:

“23.2 1.43 * 4.43 + 5.32 1.90 * +”

其中缀表达式为:“23.21.43+4.43+5.321.90”

后缀表达式的求值规则为:从左到右扫描后缀表达式,如果遇到一个操作数,将其压入栈中,如果遇到一个操作符,则从栈中弹出两个操作数,注意:在弹出时被减(加、乘、除)数先被弹出,计算结果,然后把结果入栈,直到遍历完后缀表达式,则计算完成,此时的栈顶元素即为计算结果。如上的后缀表达式求值过程为:
1.初始,栈空
2.遇到操作数23.2,入栈
3.遇到操作数1.43,入栈
4.遇到操作符*,弹出栈中两个元素,计算结果入栈
5.遇到操作数4.43,入栈
6.遇到操作符+,弹出占中两个元素,计算结果入栈
7.遇到操作数5.32,入栈
8.遇到操作数1.90,入栈
9.遇到操作符*,弹出栈中两个元素,计算结果入栈
10.遇到操作符+,弹出占中两个元素,计算结果入栈


算法实现(go语言版)

链表实现栈数据结构

package data

type Node struct {
   
	value float64
	next  *Node
}

//栈,先进后出,后进先出
type MyStack struct {
   
	head *Node
	size int
}

//判断栈是否为空
func (st *MyStack) Empty() bool {
   
	if st.size > 0 {
   
		return false
	}
	return true
}

//获取栈的元素个数
func (st 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值