基础算法与数据结构(二)前缀、中缀、后缀表达式

目录

  • 简介
  • 前缀表达式计算
  • 后缀表达式计算

简介

中缀表达式(正常的表达式)

\[
(1+2)*3-4
\]

前缀表达式(运算符位于操作数之前)

\[
-*+1234
\]

后缀表达式(运算符位于操作数之后)

\[
12+3*4-
\]

前缀表达式计算

从右向左遍历,遇到数字的时候,将数字入栈,遇到运算符的时候,弹出栈顶两个数字运算,将运算结果入栈,直到剩下最后一个数字。

遍历元素 备注
4 4 4入栈
3 43 3入栈
2 432 2入栈
1 4321 1入栈
+ 433 12出栈,作1+2=3入栈
* 49 33出栈,作3*3=9入栈
- 5 49出栈,作9-4=5入栈

后缀表达式计算

从左向右遍历,遇到数字的时候,将数字入栈,遇到运算符的时候,弹出栈顶两个数字运算,将运算结果入栈,直到剩下最后一个数字。

遍历元素 备注
1 1 1入栈
2 12 2入栈
+ 3 12出栈,作1+2=3入栈
3 33 3入栈
* 9 33出栈,作3*3=9入栈
4 94 4入栈
- 5 94出栈,作9-4=5入栈

原文地址:https://www.cnblogs.com/pullself/p/10049670.html

时间: 2024-10-10 11:04:06

基础算法与数据结构(二)前缀、中缀、后缀表达式的相关文章

前缀 中缀 后缀表达式

1.前缀表达式叫波兰式,后缀叫逆波兰式 2.中缀表达式转另外两个比较简单,前后缀装中缀较麻烦 3.问题分求表达式还是求值,如果是求值则需要两个栈,一个是操作符栈,一个是操作数栈,等操作符栈入栈完毕后依次出栈,并把操作数栈顶两个操作数计算并将 结果重新压入栈 4.只有中缀表达式有括号一说,波兰式和逆波兰式的运算顺序严格定义,不需要括号 5.计算机并没有中缀计算能力,需转化为波兰式或逆波兰式 6.波兰式和逆波兰式转中缀的编程题还没见到,只见到填空题有,可能因为计算机更需要的是波兰式和逆波兰式 7.中

算法与数据结构(二):链表

上一篇简单的开了一个头,简单介绍了一下所谓的时间复杂度与空间复杂度,从这篇开始将陆陆续续写一下常用的数据结构:链表.队列.栈.树等等. 链表当初是我在学校时唯一死磕过的数据结构,那个时候自己还算是一个好学生,虽然上课没怎么听懂,但是课后还是根据仔细调试过老师给的代码,硬是自己给弄懂了,它是我离校时唯一能够写出实现的数据结构,现在回想起来应该是它比较简单,算法也比较直来直去吧.虽然它比较简单,很多朋友也都会链表.但是作为一个系列,如果仅仅因为它比较简单而不去理会,总觉得少了点什么,所以再这仍然将其

中缀、前缀、后缀表达式的转换

中缀表达式:a+b*c-(d+e) 第一步:按照运算符的优先级对所有的运算单位加括号:式子变成了:((a+(b*c))-(d+e)) 第二步:转换前缀与后缀表达式 前缀(波兰式):把运算符号移动到对应的括号前面 则变成了:-( +(a *(bc)) +(de)) 把括号去掉:-+a*bc+de 前缀式子出现 后缀(逆波兰式):把运算符号移动到对应的括号后面 则变成了:((a(bc)* )+ (de)+ )- 把括号去掉:abc*+de+- 后缀式子出现

[算法系列之二十四]后缀树(Suffix Tree)

之前有篇文章([算法系列之二十]字典树(Trie))我们详细的介绍了字典树.有了这些基础我们就能更好的理解后缀树了. 一 引言 模式匹配问题 给定一个文本text[0-n-1], 和一个模式串 pattern[0-m-1],写一个函数 search(char pattern[], char text[]), 打印出pattern在text中出现的所有位置(n > m). 这个问题已经有两个经典的算法:KMP算法 ,有限自动机,前者是对模式串pattern做预处理,后者是对待查证文本text做预处

中缀、前缀和后缀表达式

我们学习的算法中的表达式有中缀.前缀和后缀之分,到底有什么区别呢? 中缀(INFIX) 中缀表达式(infix expression)可以是单个变量,或两个变量以及中间的操作符. AA + B(A + B) + (C – D) 前缀(PREFIX) 前缀表达式(prefix expression)可以是单个变量,一个操作符,后面跟两个操作数,每个前缀表达式包括一个操作符和两个操作数. A+ A B+ + A B – C D 后缀(POSTFIX) 后缀表达式(postfix expression

中缀表达式转前缀和后缀表达式

中缀转前缀 #ifndef POSTFIX_TO_NIFIXEXPRESS_H #define POSTFIX_TO_NIFIXEXPRESS_H #include<iostream> #include<string> #include<stack> /************************************************************************/ /* 中缀表达式转前缀表达式 建立一个栈来保存运算符,和一个字符容器存字

数据结构栈之计算后缀表达式

对于一个给定的后缀表达式,(如果它是合法的) 注意:次算法是基于基本操作符是2元操作符且操作数为一位正整数! 其求值的基本思想是:对于给定的表达式进行遍历,假设遇到的是操作数就将其压入栈:假设遇到的是操作符,将栈顶的两个元素弹出,假设栈顶两个元素依次为a,b(a在上b在下),将次操作符应用于这两个栈顶元素,比方b-a(注意b在左a在右)然后将计算结果压入栈(用来充当下一个操作符的操作数): 最后输出栈顶元素即为结果(事实上假设表达式合法终于栈里面一定会仅仅有一个元素) #include <std

数据结构之 栈和队列---算术表达式的转换(前缀+中缀+后缀)

算术表达式的转换 Time Limit: 1000MS Memory limit: 65536K 题目描述 小明在学习了数据结构之后,突然想起了以前没有解决的算术表达式转化成后缀式的问题,今天他想解决一下. 因为有了数据结构的基础小明很快就解出了这个问题,但是他突然想到怎么求出算术表达式的前缀式和中缀式呢?小明很困惑.聪明的你帮他解决吧. 输入 输入一算术表达式,以\'#\'字符作为结束标志.(数据保证无空格,只有一组输入) 输出 输出该表达式转换所得到的前缀式 中缀式 后缀式.分三行输出,顺序

图的基础算法(大话数据结构笔记)

概述 线性表的每个元素有线性关系,每个数据元素只有一个直接前去和一个直接后继.树的数据元素之间有着明细那的层次关系,并且每层上的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关.这和一对父母可以有很多孩子,但每个孩子却只能有一对父母是一个道理.可现实中,人与人之间关系复杂,不是简单一对一,一对多的关系.这种复杂关系更适合用图来表示.在图结构中,节点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关.如下图所示:无向边:Edge (vi,vj)有向边:也叫弧,Arc. <v