第五周 【项目5
来源:互联网 发布:利用python数据分析 编辑:程序博客网 时间:2024/05/23 00:33
- /* 程序头部注释开始
- * 程序的版权和版本声明部分
- * Copyright (c) 2017, 烟台大学计算机学院学生
- * All rights reserved.
- * 文件名称: danlianbao.cpp
- * 作 者: 胡俊超
- * 完成日期: 2017 年 10 月 18 日
- * 版 本 号: v1.0
- * 对任务及求解方法的描述部分
- * 问题描述:利用sqstack.h中栈的基本运算,实现将一个中缀表达式转换为对应的后缀表达式的算法。例如,输入(56-20)/(4+2),输出后缀表达式::56#20#-4#2#+/要求在数字后加#。
#include <stdio.h>#include <stdlib.h>#include "sqstack.h"#define MaxOp 7struct //设定运算符优先级{ char ch; //运算符 int pri; //优先级}lpri[]= {{'=',0},{'(',1},{'*',5},{'/',5},{'+',3},{'-',3},{')',6}},rpri[]= {{'=',0},{'(',6},{'*',4},{'/',4},{'+',2},{'-',2},{')',1}};int leftpri(char op) //求左运算符op的优先级{ int i; for (i=0; i<MaxOp; i++) if (lpri[i].ch==op) return lpri[i].pri;}int rightpri(char op) //求右运算符op的优先级{ int i; for (i=0; i<MaxOp; i++) if (rpri[i].ch==op) return rpri[i].pri;}bool InOp(char ch) //判断ch是否为运算符{ if (ch=='(' || ch==')' || ch=='+' || ch=='-' || ch=='*' || ch=='/') return true; else return false;}int Precede(char op1,char op2) //op1和op2运算符优先级的比较结果{ if (leftpri(op1)==rightpri(op2)) return 0; else if (leftpri(op1)<rightpri(op2)) return -1; else return 1;}void trans(char *exp,char postexp[])//将算术表达式exp转换成后缀表达式postexp{ SqStack *opstack; //定义运算符栈 int i=0; //i作为postexp的下标 ElemType ch; InitStack(opstack); //用初始化栈运算为栈分配空间,务必要做 Push(opstack, '='); while (*exp!='\0') //exp表达式未扫描完时循环 { if (!InOp(*exp)) //为数字字符的情况 { while (*exp>='0' && *exp<='9') //判定为数字 { postexp[i++]=*exp; exp++; } postexp[i++]='#'; //用#标识一个数值串结束 } else //为运算符的情况 { GetTop(opstack, ch); //取得栈顶的运算符 switch(Precede(ch ,*exp)) { case -1: //栈顶运算符的优先级低:进栈 Push(opstack, *exp); exp++; //继续扫描其他字符 break; case 0: //只有括号满足这种情况 Pop(opstack, ch); //将(退栈 exp++; //继续扫描其他字符 break; case 1: //退栈并输出到postexp中 postexp[i++]=ch; Pop(opstack, ch); break; } } } //while (*exp!='\0') Pop(opstack, ch); while (ch!='=') //此时exp扫描完毕,退栈到'='为止 { postexp[i++]=ch; Pop(opstack, ch); } postexp[i]='\0'; //给postexp表达式添加结束标识 DestroyStack(opstack);}int main(){ char exp[]="(56-20)/(4+2)"; //可将exp改为键盘输入 char postexp[200]; trans(exp,postexp); printf("中缀表达式:%s\n",exp); printf("后缀表达式:%s\n",postexp); return 0;}
阅读全文
0 0
- 第五周 【项目5
- 第五周项目5
- 第五周项目 5 友元类
- 第五周项目5——友元类
- 第五周项目5——友元类
- 第五周项目1(5)
- 第五周项目1(5)
- 第五周 项目1(5)
- 第五周项目1(5)
- 第五周项目5--后缀表达式
- 第五周 项目5-后缀表达式
- 第五周项目5 -后缀表达式
- 第五周项目5--后缀表达式
- 第五周 项目5 - 后缀表达式
- 第五周项目5-后缀表达式
- 第五周项目5-后缀表达式
- 第五周项目5-后缀表达式
- 第五周项目5--分段函数
- 高速缓存系统之redis c++使用实例
- 10.18
- nodejs+express中利用中间件提高代码复用
- Node.js is the New Black
- SpringMVC 记录用户的操作日志
- 第五周 【项目5
- 如何在移动端调出纯数字键盘
- Eclipse常用快捷键
- 内存溢出和内存泄漏
- BlockingQueue的使用
- 面试_技术问题_mybatis
- solr异常:maxClauseCount is set to 1024
- EOSPlatform7.6补丁列表
- CentOS 7.0安装MariaDB