
/* Copyright (c)2015,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第6周项目5 - 后缀表达式.cpp 作 者:孙翰文 完成日期:2015年10月12日 版 本 号:v1.0 问题描述:利用sqstack.h中栈的基本运算,实现将一个中缀表达式转换为对应的后缀表达式的算法。 例如,输入(56-20)/(4+2),输出后缀表达式::56#20#-4#2#+/要求在数字后加# 输入描述:若干数据。 程序输出:对应表达式的输出。 */
顺序栈算法库
#include <stdio.h> #include <stdlib.h> #include "sqstack.h" #define MaxOp 7 struct //设定运算符优先级 { 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!='