⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 expr.h

📁 数据结构课程设计,表达式,用C语言实现,难度系数较高
💻 H
字号:
#ifndef EXPR_H
#define EXPR_H
  
#define TRUE	1
#define FALSE	0
#define OK		1
#define ERROR	0
#define IBFEASIBLE  -1
#define OVERFLOW    -2 

#define MAXLEN  20
#define MAXSIZE 20

typedef	int	Status;
//typedef BiTree QElemType;
typedef enum{ OPER, VAR, ORD }ElemTag;//运算符,变量,常量
typedef struct ExpNode
{
	ElemTag tag;		//标记
	union{               
		char expr[4];	//存放运算符名
		struct{
			char var;	//变量名
			float val;	//变量的值
		}vary;			//存放变量
		int ordina;     //存放常量值
	};
	struct ExpNode *lchild, *rchild;		/* 左右孩子指针 */
} *ExpTree;							/* 二叉树的二叉链表存储表示 */

/*我原来是直接用二叉树的存储结构的,后来发现受到这个结构类型的很大限制,受到广义表存储结构的启发,就自己设计了这样一个存储类型。下面分析这个存储结构:
(1)、用ElemTag tag;来标记是运算符,变量,常量。用枚举类型定义typedef enum{ OPER, VAR, ORD }ElemTag,可以区分是运算符,变量,常量。
(2)、用字符串char expr[4];	来存放运算符名,我先预定存放三个字符的运算符名(最后一个char用来存放'\0'),这样运算符不仅可以是'+' , '-' , '*','/','^',还可以是'sin','cos','tan'。如果觉得三个字符不够,可以扩展。
(3)、struct{			char var;	//存放变量名			float val;	//存放变量的值,初始为0		}vary;//存放变量。这样在变量赋值后,还可以保存着变量名。可以用作如公式一样,重复赋值使用。
(4)、使用int ordina;来存放常量值。这样赋值时,就扩大了赋值范围,可以是一个整形的范围,大大扩大了本程序的使用范围。但需要在赋值时使用,在输入时,还是得用0-9,这也是本程序的缺陷,有待改进。

*/


int Random( int   nMin, int   nMax );
//返回nMin到nMax之间的随机数
void FindVary( char * c, char * e );
//找出表达式中的变量
Status ArrayCreateExp( ExpTree &E, char *ch, int &i );
//从ch数组中读取字符串,构造表达式
void CreateExp( ExpTree &E, char *ch, int &i ) ;
//Status InputCreateExp( ExpTree &E );  
//从键盘先序输入来构造表达式树T
Status Visit( ExpTree e );
//输出e的内容
void InorderExp( ExpTree E, Status ( * Visit )( ExpTree e ) );
//输出中序表达式用带括号的中缀表示式输出
Status Assign( ExpTree E, char v, float c ) ;
//对表达式内的所有v,赋值c
float Value( ExpTree E );
//计算表达式的值
ExpTree Compound( char p, ExpTree e1, ExpTree e2 );
//5.构造一个新的复合表达式(E1)P(E2)	
Status Diff( ExpTree &E, char V );
//求表达式E对变量V的导数
void MergeConst( ExpTree E );
//合并表达式种所有常数运算
Status PreOrderTraverse( ExpTree E, Status ( * Visit )( ExpTree e ) );
//波兰式输出
Status PostOrderTraverse( ExpTree E, Status ( * Visit )( ExpTree e ) );
//逆波兰式输出

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -