资源简介
广东工业大学数据结构表达式类型的实现,完美代码、报告,
代码片段和文件信息
#include
#include
#include
#include
#include
#define ERROR 0
#define OK 1
#define TRUE 1
#define FALSE 0
#define MAXSIZE 100
#define MAXINT 65535
typedef char TElemType;
typedef TElemType EElemType;
typedef enum{OperatorConstantVariable}ElemTag;//Operator==0:运算符constant==1:常量Variable==2:变量
//不带头结点的二叉链表存储表示
typedef struct BiTNode
{
ElemTag tag; //用于区别操作数和运算符
EElemType data; //数据域
int value; //值域若元素类型为常量或变量则用来记录它的值,运算符则用来记录两子树运算后的结果
struct BiTNode *lchild*rchild; //孩子结点的指针
}BiTNode*BiTree;
typedef BiTree Expr;
typedef int Status;
void Assign(Expr &EEElemType Vint c)
{
//实现对变量V的赋值(V=c)变量的初值为0
//先序遍历整棵树把数据域为V的结点赋值为c
if(!E)return;
if(E->data==V)E->value=c;
Assign(E->lchildVc);
Assign(E->rchildVc);
}
Expr CompoundExpr(EElemType PExpr &E1Expr E2)
{
//构造一个新的符合表达式(E1)P(E2)
BiTNode *p;
if(!(p=(BiTNode*)malloc(sizeof(BiTNode))))return NULL;
p->lchild=E1; //运算符的左孩子
p->rchild=E2; //运算符的右孩子
p->tag=Operator;
p->data=P;
return p;
}
Status Destroy(Expr &T)
{
if(!T)return OK;
Destroy(T->lchild);
Destroy(T->rchild);
free(T);
T=NULL;
return OK;
}
Status Exist(Expr EEElemType e)
{
//判断表达式E是否存在变量e存在返回TRUE,否则返回FALSE
if(!E||e<‘a‘||e>‘z‘)return FALSE; //不是变量则返回错误
if(E->data==e)return TRUE;
return Exist(E->lchilde)||Exist(E->rchilde); //递归寻找e
}
Status Diff(Expr &EEElemType v)
{
//先序遍历整个表达式E对变量v进行求导
BiTNode *p*q;
if(!E||E->tag!=Operator)return OK;
p=E;
if(Exist(Ev)) //如果子孙中有变量v
{
if(E->data==‘^‘) //若当前结点为‘^‘
{
//交换右子树赋值给左子树
p=E->lchild;
E->lchild=E->rchild;
E->data=‘*‘; //当前运算符变为*
//右子树变为原来表达式指数-1的情况
if(!(q=(BiTNode*)malloc(sizeof(BiTNode))))return(OVERFLOW);
q->tag=Operator; //右子树根结点
q->data=‘^‘;
q->value=MAXINT;
q->lchild=p; //右子树的左孩子是当前结点原来的左子树
if(!(p=(BiTNode*)malloc(sizeof(BiTNode))))return(OVERFLOW);
p->tag=Constant; //右子树的右孩子
p->data=E->lchild->data-1;
p->value=E->lchild->value-1;
p->lchild=p->rchild=NULL;
q->rchild=p;
E->rchild=q;
p=E->rchild;
}
else if(E->data==‘*‘) ////若当前结点为‘*‘
{
if(E->rchild->data==v) //右孩子直接为变量v,则求导后v的指数为0
{
free(E->rchild); //删除右结点
p=E;
E=E->lchild; //把左孩子成为根结点
free(p);
p=E;
}
//其的情况则最后合并常数则可以
}
else
{
if(!Exist(E->lchildv))q=E->lchild; //若左孩子或右孩子没有变量,则左孩子或右孩子变成常数0
if(!Exist(E->rchildv))q=E->rchild;
q->data=‘0‘;
q->value=0;
q->lchild=q->rchild=NULL;
}
}
else //不存在变量则把整个树删除,留下根结点
{
Destroy(E->lchild); //删除左右子树
Destroy(E->rchild);
E->tag=Constant; //根结点为常数0
E->data=‘0‘;
E->value=0;
}
Diff(p->lchildv); //递归左右子树
Diff(p->rchildv);
return OK;
}
int Value(Expr &E)
{
//后根遍历对表达式求值
int ab;
if(E->tag!=Operator)return E->value;
a=Value(E->lchild);
b=Value(E->rchild);
if(a==MAXINT||b==MAXINT)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-06-26 21:19 表达式类型的实现\
文件 8 2015-06-20 23:03 表达式类型的实现\1.txt
文件 16675 2015-07-10 12:20 表达式类型的实现\ex
文件 225323 2015-06-20 22:30 表达式类型的实现\ex
文件 1131 2015-06-20 23:18 表达式类型的实现\测试数据.txt
文件 519942 2015-07-10 12:19 表达式类型的实现\表达式类型的实现课程设计报告.doc
相关资源
- 数据结构年终考题范围和答案 耿国华
- 数据结构 朱战力 习题解答 数据结构
- 数据结构课程设计 6 1 彩票系统
- 教学计划编制系统
- 大数(链表、数组)实现
- 自己写的航空订票系统c 版--数据结构
- 数据结构实验魔王语言
- 航空订票系统_数据结构课程设计
- 多项式求和(数据结构C 版)
- 尚观培训linux董亮老师关于数据结构的
- 数据结构 知识点总结
- 华南理工大学数据结构复习提纲二
- 华南理工大学数据结构复习提纲一
- 数据结构用C 写的停车场系统源代码
- 数据结构(河北科技大学)
- 数据结构考前习题 清华大学出版社
- 数据结构课件(北邮)
- 数据结构实验 基于栈的表达式求值
- 数据结构课程设计——图书管理系统
- 成绩管理系统(数据结构)
- 数据结构-最小通信网问题
- 数据结构课程设计同学通讯录系统
- 数据结构课程设计 公园导游图
- 数据结构殷人昆版的课后答案
- 2006年湖北工业大学409数据结构试题
- 数据结构实验-魔王语言-源码加实验报
- 简单计算器的实现(数据结构)
- 简单计算器的实现(数据结构 修正版
- Fundamentals of Data Structure in C
- 北京邮电大学数据结构历年考研真题
评论
共有 条评论