收藏 分享(赏)

什么是前缀表达式.doc

上传人:j35w19 文档编号:4563440 上传时间:2019-01-02 格式:DOC 页数:4 大小:41KB
下载 相关 举报
什么是前缀表达式.doc_第1页
第1页 / 共4页
什么是前缀表达式.doc_第2页
第2页 / 共4页
什么是前缀表达式.doc_第3页
第3页 / 共4页
什么是前缀表达式.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、什 么 是 前 缀 表 达 式前 缀 表 达 式 就 是 不 含 括 号 的 算 术 表 达 式 , 而 且 它 是 将 运 算 符 写 在 前 面 ,操 作 数 写 在 后 面 的 表 达 式 , 也 称 为 “波 兰 式 ”。 例 如 , - 1 + 2 3, 它 等 价于 1-(2+3)。 编 辑 本 段前 缀 表 达 式 如 何 求 值对 于 一 个 前 缀 表 达 式 的 求 值 而 言 , 首 先 要 从 右 至 左 扫 描 表 达 式 , 从 右 边第 一 个 字 符 开 始 判 断 , 如 果 当 前 字 符 是 数 字 则 一 直 到 数 字 串 的 末 尾 再 记 录 下来

2、 , 如 果 是 运 算 符 , 则 将 右 边 离 得 最 近 的 两 个 “数 字 串 ”作 相 应 的 运 算 , 以此 作 为 一 个 新 的 “数 字 串 ”并 记 录 下 来 。 一 直 扫 描 到 表 达 式 的 最 左 端 时 , 最后 运 算 的 值 也 就 是 表 达 式 的 值 。 例 如 , 前 缀 表 达 式 “- 1 + 2 3“的 求 值 ,扫 描 到 3 时 , 记 录 下 这 个 数 字 串 , 扫 描 到 2 时 , 记 录 下 这 个 数 字 串 , 当 扫 描到 +时 , 将 +右 移 做 相 邻 两 数 字 串 的 运 算 符 , 记 为 2+3, 结

3、 果 为 5, 记 录 下 这个 新 数 字 串 , 并 继 续 向 左 扫 描 , 扫 描 到 1 时 , 记 录 下 这 个 数 字 串 , 扫 描 到 -时 , 将 -右 移 做 相 邻 两 数 字 串 的 运 算 符 , 记 为 1-5, 结 果 为 -4, 所 以 表 达 式 的值 为 -4。 编 辑 本 段前 缀 表 达 式 有 什 么 用 处前 缀 表 达 式 是 一 种 十 分 有 用 的 表 达 式 , 它 将 中 缀 表 达 式 转 换 为 可 以 依 靠简 单 的 操 作 就 能 得 到 运 算 结 果 的 表 达 式 。 例 如 , (a+b)*(c+d)转 换 为*,

4、+,a,b,+,c,d。 它 的 优 势 在 于 只 用 两 种 简 单 的 操 作 , 入 栈 和 出 栈 就 可 以 解 决任 何 中 缀 表 达 式 的 运 算 。 其 运 算 方 式 为 : 如 果 当 前 字 符 (或 字 符 串 )为 数 字 或变 量 , 则 压 入 栈 内 ; 如 果 是 运 算 符 , 则 将 栈 顶 两 个 元 素 弹 出 栈 外 并 作 相 应 运算 , 再 将 结 果 压 入 栈 内 。 当 前 缀 表 达 式 扫 描 结 束 时 , 栈 里 的 就 是 中 缀 表 达 式运 算 的 最 终 结 果 。 编 辑 本 段中 缀 表 达 式 转 换 为 前

5、缀 表 达 式 的 一 些 例 子a+b - +,a,b a+(b-c) - +,a,-,b,c a+(b-c)*d - +,a,*,-,b,c,d a=1+3 - a=+,1,3 编 辑 本 段中 缀 表 达 式 转 换 为 前 缀 表 达 式 的 一 般 算 法(1) 首 先 构 造 一 个 运 算 符 栈 (也 可 放 置 括 号 ), 运 算 符 (以 括 号 分 界 点 )在栈 内 遵 循 越 往 栈 顶 优 先 级 不 降 低 的 原 则 进 行 排 列 。 (2)从 右 至 左 扫 描 中 缀 表 达 式 , 从 右 边 第 一 个 字 符 开 始 判 断 : 如 果 当 前 字

6、 符 是 数 字 , 则 分 析 到 数 字 串 的 结 尾 并 将 数 字 串 直 接 输 出 。 如 果 是 运 算 符 , 则 比 较 优 先 级 。 如 果 当 前 运 算 符 的 优 先 级 大 于 等 于 栈 顶运 算 符 的 优 先 级 (当 栈 顶 是 括 号 时 , 直 接 入 栈 ), 则 将 运 算 符 直 接 入 栈 ; 否 则将 栈 顶 运 算 符 出 栈 并 输 出 , 直 到 当 前 运 算 符 的 优 先 级 大 于 等 于 栈 顶 运 算 符 的优 先 级 (当 栈 顶 是 括 号 时 , 直 接 入 栈 ), 再 将 当 前 运 算 符 入 栈 。 如 果

7、是 括 号 , 则 根 据 括 号 的 方 向 进 行 处 理 。 如 果 是 右 括 号 , 则 直 接 入 栈 ;否 则 , 遇 右 括 号 前 将 所 有 的 运 算 符 全 部 出 栈 并 输 出 , 遇 右 括 号 后 将 左 右 的 两括 号 一 起 删 除 。 (3) 重 复 上 述 操 作 (2)直 至 扫 描 结 束 , 将 栈 内 剩 余 运 算 符 全 部 出 栈 并 输 出 ,再 逆 序 输 出 字 符 串 。 中 缀 表 达 式 也 就 转 换 为 前 缀 表 达 式 了 。 实 例 分 析将 中 缀 表 达 式 “1+(2+3)*4)-5”转 换 为 前 缀 表 达

8、 式 。 中 缀 表 达 式 后 缀 表 达 式 运 算 符 栈 说 明 5 5 空 5, 是 数 字 串 直 接 输 出 - 5 - -, 栈 内 无 运 算 符 , 直 接 入 栈) 5 - ) ), 直 接 入 栈 4 5 4 - ) 4, 是 数 字 串 直 接 输 出 * 5 4 - ) * *, 栈 顶 是 括 号 , 直 接 入 栈 ) 5 4 - ) * ) ), 直 接 入 栈 3 5 4 3 - ) * ) 3, 是 数 字 串 直 接 输 出 + 5 4 3 - ) * ) + +, 栈 顶 是 括 号 , 直 接 入 栈 2 5 4 3 2 - ) * ) + 2, 是

9、 数 字 串 直 接 输 出 ( 5 4 3 2 + - ) * (, 参 考 ( 5 4 3 2 + * - (, 参 考 + 5 4 3 2 + * - + +, 优 先 级 大 于 等 于 栈 顶 运 算 符 , 直 接 入 栈1 5 4 3 2 + * 1 - + 1, 是 数 字 串 直 接 输 出 空 5 4 3 2 + * 1 + - 空 描 扫 结 束 , 将 栈 内 剩 余 运 算 符 全 部 出 栈 并 输 出 空 - + 1 * + 2 3 4 5 空 逆 序 输 出 字 符 串 编 辑 本 段各 运 算 符 及 符 号 优 先 级): 直 接 入 栈 (: 遇 )前 ,

10、 将 运 算 符 全 部 出 栈 并 输 出 ; 遇 )后 , 将 两 括 号 一 起 删 除 +、 -: 1 *、 /、 %: 2 : 3后 缀 表 达 式不 包 含 括 号 , 运 算 符 放 在 两 个 运 算 对 象 的 后 面 , 所 有 的 计 算 按 运 算 符 出现 的 顺 序 , 严 格 从 左 向 右 进 行 ( 不 再 考 虑 运 算 符 的 优 先 规 则 , 如 : 2 1 + 3 *,即 (2 + 1) * 3 编 辑 本 段表 达 式 的 计 算运 用 后 缀 表 达 式 进 行 计 算 的 具 体 做 法 : 建 立 一 个 栈 S 从 左 到 右 读 后 缀

11、表 达 式 , 读 到 数 字 就 将 它 转 换 为 数 值压 入 栈 S 中 , 读 到 运 算 符 则 从 栈 中 依 次 弹 出 两 个 数 分 别 到 Y 和 X, 然 后 以“X 运 算 符 Y”的 形 式 计 算 机 出 结 果 , 再 压 加 栈 S 中 如 果 后 缀 表 达 式 未读 完 , 就 重 复 上 面 过 程 , 最 后 输 出 栈 顶 的 数 值 则 为 结 束 编 辑 本 段表 达 式 之 间 的 转 换计 算 机 实 现 转 换 : 将 中 缀 表 达 式 转 换 为 后 缀 表 达 式 的 算 法 思 想 : 开 始 扫 描 ; 数 字 时 , 加 入 后

12、 缀 表 达 式 ; 运 算 符 : a. 若 为 最 高 级 的 运 算 符 , 入 栈 ; b. 若 为 (, 入 栈 ; c. 若 为 ), 则 依 次 把 栈 中 的 的 运 算 符 加 入 后 缀 表 达 式 中 , 直 到 出 现(, 从 栈 中 删 除 ( ; d. 若 为 不 是 最 高 级 的 运 算 符 , 则 将 从 栈 顶 到 第 一 个 优 先 级 不 大 于 ( 小 于 ,低 于 或 等 于 ) 它 的 运 算 符 ( 或 (,但 优 先 满 足 前 一 个 条 件 ) 之 间 的 运 算 符 加入 后 缀 表 达 式 中 , 该 运 算 符 再 入 栈 ; 这 句

13、 话 不 好 理 解 , 可 以 说 成 这 样 , 从 栈 顶 开 始 , 依 次 弹 出 比 当 前 处 理的 运 算 符 优 先 级 高 的 运 算 符 , 直 到 一 个 比 它 优 先 级 低 的 或 者 遇 到 了 一 个 左 括号 就 停 止 。 当 扫 描 的 中 缀 表 达 式 结 束 时 , 栈 中 的 的 所 有 运 算 符 出 栈 ; 人 工 实 现 转 换 这 里 我 给 出 一 个 中 缀 表 达 式 : a+b*c-(d+e) 第 一 步 : 按 照 运 算 符 的 优 先 级 对 所 有 的 运 算 单 位 加 括 号 : 式 子 变 成 了 :(a+(b*c)

14、-(d+e) 第 二 步 : 转 换 前 缀 与 后 缀 表 达 式 前 缀 : 把 运 算 符 号 移 动 到 对 应 的 括 号 前 面 则 变 成 了 : -( +(a *(bc) +(de) 把 括 号 去 掉 : -+a*bc+de 前 缀 式 子 出 现 后 缀 : 把 运 算 符 号 移 动 到 对 应 的 括 号 后 面 则 变 成 了 : (a(bc)* )+ (de)+ )- 把 括 号 去 掉 : abc*+de+- 后 缀 式 子 出 现 发 现 没 有 , 前 缀 式 , 后 缀 式 是 不 需 要 用 括 号 来 进 行 优 先 级 的 确 定 的 。 如表 达 式

15、 : 3+(2-5)*6/3 后 缀 表 达 式 栈 3 + 3 +( 3 2 +(- 3 2 5 - + 3 2 5 - +* 3 2 5 - 6 * +/ 3 2 5 - 6 *3 +/ 3 2 5 - 6 *3 /+中缀表达式中 缀 表 达 式 ( 或 中 缀 记 法 ) 是 一 个 通 用 的 算 术 或 逻 辑 公 式 表 示 方 法 , 操 作 符 是 以 中 缀 形 式 处 于 操 作 数 的 中 间 ( 例 : 3 + 4) 。 中 缀 表 达 式 是 人 们常 用 的 算 术 表 示 方 法 。 与 前 缀 表 达 式 ( 例 : + 3 4) 或 后 缀 表 达 式 ( 例 : 3 4 +) 相 比 , 中 缀 表达 式 不 容 易 被 计 算 机 解 析 , 但 仍 被 许 多 程 序 语 言 使 用 , 因 为 它 符 合 人 们 的 普遍 用 法 。 与 前 缀 或 后 缀 记 法 不 同 的 是 , 中 缀 记 法 中 括 号 是 必 需 的 。 计 算 过 程 中 必须 用 括 号 将 操 作 符 和 对 应 的 操 作 数 括 起 来 , 用 于 指 示 运 算 的 次 序 。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 统计图表

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报