这是在学校时作为一个热心人在优快云论坛上解决的一个
问题,最近用到了这个算法,重写看来是有难度了,之前没留过这些代码,好在论坛上还能搜到。看看以前写的代码,很有意思啊:)还是留在我的地盘比较放心,copy/paste一下吧。算法是那么回事,程序很多毛病啊
/**
* 假设输入的中缀表达式为:
* (a+b)*((c+d)*e+f*h*g)
*
* 1)以二叉链表的存储结构创建一棵。
* 2)先根遍历为:此中缀表达式的前缀表达式
* 3)后根遍历为:此中缀表达式的后缀表达式
*
* 2005/04/28
*/
#include<stack>
#include<iostream>
#include<stdio.h>
#include<ctype.h>
#include<string.h>
using namespace std;
//
// 数据类型定义区
//
typedef struct nodeTag{ /* 表达式二叉树结点类型 */
union{
int opnd;
char optr;
}val;
struct nodeTag *left;
struct nodeTag *right;
}treeNode;
typedef struct pTag{ /* 优先表结点类型 */
char op;
int f;
int g;
}Prior;
//
// 全局变量定义区
//
Prior pList[] = { /* 优先表 */
'+', 2, 1,
'-', 2, 1,
'*', 4, 3,
'/', 4, 3,
'^', 4, 5,
'(', 0, 5,
')', 6, 0,
'$', 0, 0
};
stack<char> OptrStack; /* 操作符栈 */
stack<treeNode*> ExprStack; /* 表达式栈 */
const int NUM = 256;
const int OPTR = 257;
int tokenval; /* 下一输入值 */
/**************************************************************************
* descr :比较栈顶运算符与下一输入运算符优先关系
* param :opf 栈顶运算符
* param :opg 下一输入运算符
* return :关系'>', '=', '<'
**************************************************************************/
char Prece
/**
* 假设输入的中缀表达式为:
* (a+b)*((c+d)*e+f*h*g)
*
* 1)以二叉链表的存储结构创建一棵。
* 2)先根遍历为:此中缀表达式的前缀表达式
* 3)后根遍历为:此中缀表达式的后缀表达式
*
* 2005/04/28
*/
#include<stack>
#include<iostream>
#include<stdio.h>
#include<ctype.h>
#include<string.h>
using namespace std;
//
// 数据类型定义区
//
typedef struct nodeTag{ /* 表达式二叉树结点类型 */
union{
int opnd;
char optr;
}val;
struct nodeTag *left;
struct nodeTag *right;
}treeNode;
typedef struct pTag{ /* 优先表结点类型 */
char op;
int f;
int g;
}Prior;
//
// 全局变量定义区
//
Prior pList[] = { /* 优先表 */
'+', 2, 1,
'-', 2, 1,
'*', 4, 3,
'/', 4, 3,
'^', 4, 5,
'(', 0, 5,
')', 6, 0,
'$', 0, 0
};
stack<char> OptrStack; /* 操作符栈 */
stack<treeNode*> ExprStack; /* 表达式栈 */
const int NUM = 256;
const int OPTR = 257;
int tokenval; /* 下一输入值 */
/**************************************************************************
* descr :比较栈顶运算符与下一输入运算符优先关系
* param :opf 栈顶运算符
* param :opg 下一输入运算符
* return :关系'>', '=', '<'
**************************************************************************/
char Prece