ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:58.49KB ,
资源ID:17622799      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17622799.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验三实验报告Word文档下载推荐.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验三实验报告Word文档下载推荐.docx

1、二叉树T已经存在。销毁T。 Value(&计算出T所表示的四则运算表达式的值并返回。ADT BineryTree顺序栈的抽象数据类型定义ADT Stack具有相同类型及后进先出特性的数据元素集合。相邻数据元素具有前去和后继关系。 基本操作: InitStack(&无构造一个空栈S。 DestroyStack(&栈S已经存在。销毁S。 StackLength(&返回S中元素个数。 GetTop(S , &e)栈S已经存在且非空。用e返回S的栈顶元素。 Push(&S , e)插入元素e为S的新栈顶元素。 Pop(& 初始条件:删除S的栈顶元素,并用e返回其值。ADT Stack字符串的抽象数据类

2、型定义ADT String具有字符类型的数据元素集合。相邻数据元素具有前驱和后继关系。 StrLength(S)串S已经存在。返回S的元素个数。 StrNeg(S , F)串S已经存在且非空。求S的逆序并将结果保存在串F中。ADT String本程序包含四个模块:主程序模块;二叉树单元模块(实现二叉树的抽象数据类型,包括结点和指针的定义);顺序栈单元模块(实现顺序栈的抽象数据类型,包含结点和指针的定义);字符串单元模块(实现字符串的抽象数据类型)。四个模块之间调用关系为主程序模块二叉树模块,二叉树模块调用顺序栈模块。详细设计顺序栈类型。#define Stack_Size 100typedef

3、 struct char elemStack_Size; int top;SqStack 基本操作实现的伪代码算法如下: void InitStack (SqStack &S) /初始化顺序栈 S.elem=new ElemTypeStack_Size; if(!S.elem) Error(Overflow!); S.top=-1; viod Push (SqStack &S,char c) /顺序栈压栈 if(S.top=(Stack_Size-1) Error(Stack Overflow! S.elem+S.top=c;ElemType Pop (SqStack &S) /顺序栈出栈 i

4、f(S.top=-1) Error(Stack Empty! return S.elemS.top-; int StackLength(SqStack &S) /求顺序栈长度 return (S.top+1); GetTop(SqStack &S ,char e) /取栈顶元素 e=S.elemtop;字符串类型typedef struct /动态顺序串 char *ch; int length;String基本操作实现的伪代码算法如下:int StrLength(&S) /求串长 return S.length;void StrNeg(&S , &F) /求逆序串if(!S.length)

5、error(“String Empty!”); for(i=0 ; i=0 ; i-) /对输入串逆序扫描 if(Str.chi=48&Str.chi=Precedence( GetTop(S) ) ) Push( S , Str.chi ); else Pop(S , e); Output.chi=e;Output.length+; ) /假如是左括号,栈中运算符逐个出栈并输出,直到遇到右括号。右括号出栈并丢弃。 while( GetTop(S)!= ) Output.chi=Pop(S); while(S.top!=-1) /假如输入完毕,栈中剩余的所有操作符出栈并加到输出串中。 Outp

6、ut.ch=Output.ch-;Output.ch=Pop(S); return output;void CreatBiTree(&S) /由中缀表达式生成表达式二叉树 String F; SqStack Sq; /用以存放生成的二叉树结点 InitStack(Sq); F=Convert(S); /求得S的前缀表达式 for(i=F.length-1 ; i-) If( !IsOperator(F.chi) ) T=new TNode; T-data=F.chi;lchild=NULL;rchild=NULL; Push(Sq , T) else lchild=Pop( Sq );rchi

7、ld=Pop( Sq ); Push(Sq , T);int Calc(int a, char opr, int b) /计算 switch (opr) case return a + b; return a - b; return a * b; return a / b;int Value(TNode *T) if (T-lchild = NULL &T-rchild = NULL) return T-data; return Calc( Value(T-lchild) , T-data , Value(T-rchild) );主函数伪码算法。void main() Face(); /输出界

8、面及相关信息 do cout”Please input an expression:”Str; JudgeExp(S); /判断输入的表达式是否合法。T=CreatBiTree(S);N=Value(T);cout”The value of this expression is”Ne;if(e=y) flag=1;else flag=0; while(flag) /main测试结果附录(带注释的源程序)/*CStack.h*/#includeusing namespace std;typedef struct /字符类型顺序栈CStackvoid InitCStack(& /初始化顺序栈 S.

9、elem=new charStack_Size; if(! S.top=-1;void Push_C(CStack &S , char e) /压栈 if( S.top=(Stack_Size-1) ) Error( S.elem+S.top=e;char Pop_C(CStack & /出栈 if(S.top=-1) Error( return S.elemtop-;char GetTop(& /取栈顶元素 return S.elemtop;int CStackLength(& /求栈中元素个数 return top+1;/*TStack.h*/#includeTree.h /二叉树结点类型

10、顺序栈 TNode elemStack_Size;TStackvoid InitTStack(&void Push_T(TStack &S , TNode T) S.elem+S.top=T;TNode Pop_T(TStack &/*String.h*/typedef struct /动态顺序串 int len;Srting StrNeg(&Str) /求逆序串 F.chi = Str.chStr.len-1-i; return Fint StrLen(&Str) /求串长 int i; Str.chi!0 ; ) i+; return i;/*Tree.h*/String.hCStack.

11、hTStack.h /二叉树结点 union data /数据域 char opr; int opn; /运算数 struct TNode *lchid , *rchild; /指针域typedef TNode *BiTree; /二叉树头结点int Precedence(char opr) /判断运算符级别函数; switch(opr) return 1; return 2; return 0;bool IsOperator(char opr) /判断输入串中的字符是不是合法操作符 if(op= return true;String Convert(String &Str) /将一个中缀串转

12、换为后缀串 String Output; /输出串 Output.len=0; CStack S; InitCStack(S); Str.len=StrLen(Str); /求的输入的串长 for(i=Str.len-1 ; i-) /对输入串逆序扫描 if(Str.chi=48 & Str.chi=57) /假如是操作数,把它添加到输出串中。 Output.chStr.len-1-i=Str.chi; Output.len+; ) /假如是右括号,将它压栈。 Push_C( S , Str.chi ); while( IsOperator( Str.chi ) ) /如果是运算符 if( S

13、.top=0 | GetTop(S)=Precedence( GetTop(S) ) ) Output.chStr.len-1-i=Pop_C(S); ) /假如是左括号,栈中运算符逐个出栈并输出 /直到遇到右括号。 while( GetTop(S)! ) while(S.top!=-1) /假如输入完毕,栈中剩余的所有操作符出栈并加到输出串中。 Output.ch+Output.len-1=Pop_C(S); return StrNeg(Output); /输出Output的逆序即为所求前缀表达式Str) /由中缀表达式生成表达式二叉树 TStack S; InitTStack(S); F=

14、Convert(Str); for(i=F.len-1 ; i-) if( !IsOperator(F.chi) ) Push_T(S , T)lchild=Pop_T( S );rchild=Pop_T( S ); Push_T(S , T);int Calc(int a, char opr, int b) /计算 switch (opr)int Value(TNode *T) /求表达式二叉树的值/*JudgeExp.h*/bool JudegExp(String Exp) /此函数验证式子是否正确,即是否符合运算规则。 char check; int error=0; int lb=0;

15、 int rb=0; if(StrLen(Exp)=1 & Exp.ch0! else if( (IsOperator(Exp.ch0)& | IsOperator( Exp.chStrLen(Exp)-1 ) ) & & Exp.chStrLen(Exp)-1! ) /此处若不加,在遇到某些式子时,会出现非法操作。 for(int m=0 ; mStrLen(Exp) ; m+) check=Exp.chm; if(m=0 & check= (IsDigit(Exp.ch1)!=0 | Exp.ch1= ) ) check=Exp.ch+m; if( IsOperand(check) ); /如果是数字,跳过,不管。 else if(IsOperator(check) if( check= rb+; if( IsOperator(Exp.chm+1)&(Exp.chm+1=|Exp.chm+1=|Exp.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1