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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(魔王语言解释大数据结构课程设计报告材料doc.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

魔王语言解释大数据结构课程设计报告材料doc.docx

1、魔王语言解释大数据结构课程设计报告材料doc魔王语言解释程序一、 问题引入1. 问题描述 有一个魔王总是使用自已的一种非常精练而抽象的语言讲话,没有人能听得懂。但他的语言是可以逐步解释成人能懂的语言的,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的: (1)12m (2)(12m)(m21) 在这两种形式中,从左到右均表示解释。写一个魔王解释程序,将魔王的话解释成人能听懂的话。2. 基本要求 用下述两种规则和下述规则(2)实现。设大写字母表示魔王语言的词汇,小写字母表示人的词汇,希腊字母表示可以用大写字母或小写字母代换的变量。魔王语言可含人的词汇。 (1) BtAdA (2) As

2、ae 3. 测试数据 B(einxgz)B解释成tsaedsaeezegexeneietsaedsae 若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是:“天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。tdsaezgxnh天地上一只鹅追赶下蛋恨4实现提示 将魔王的语言自右至左进栈,总是处理栈顶字符。若是开括号,则逐一出栈,将字母顺序入队列,直至闭括号出栈,并按规则要求逐一出队列在处理后入栈。5.本程序采用的是顺序栈。基本操作列表:(1)据括号的个数设一个标记。记下括号的位置。(2)根据标记来执行依次的操作。(3)没有括号,直接进队,据翻译函数2输出人的语言。(4)有

3、括号,分为括号的和括号外的。,根据括号的位置:括号外的从右到左入栈;括号的从左到右入栈,并且依次插入括号的第一个字符。据翻译函数2 出栈并且翻译。二、需求分析1. 本演示程序中,魔王语言限制在小写字母a-z之间,且必须限制在括号以及大写字母A和B。且允许出现重复字符或非法字符,程序运用时自动过滤去,输出的运算结果中将不含重复字符和非法字符。2. 魔王语言遵守如下规则: (123n)nn-11BtAdA Asae 3. 演示程序以用户和计算机对话的形式进行,即在计算机终端中显示提示信息之后,有用户自行选择下一步命令,相应输入数据和运算结果在其后显示。4. 程序的执行命令有:1)选择操作 2)任意

4、键结束5. 数据测试 B(ehnxgz)B解释成:tsaedsaeezegexenehetsaedsae若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是:“天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。tdsaezgxnh天地上一只鹅追赶下蛋恨三、概要设计为实现上述功能,需要栈和队列两个抽象数据类型。1. 栈抽象数据类型定义ADT stack数据对象:D=ai|aiElemset,i=1,2,3,n,n=0数据关系:R1=|ai-1,aiD,i=2, n基本操作:InitStack(&s)操作结果:构造一个空栈s。Push(&s, e)初始条件:栈s已存在。操作结果

5、:插入元素e为新的栈顶元素。Pop(&s, &e)初始条件:栈s已存在且非空。操作结果:删除栈s的栈顶元素,并用e返回其值。StackLenth(&s)初始条件:栈s已存在。操作结果:返回s的元素个数,即栈的长度。ClearStack(&s)初始条件:栈s已存在。操作结果:将s清为空栈。DestoryStack(&s)初始条件:栈s已存在。操作结果:栈s被销毁。StackEmpty(&s)初始条件:栈s已存在。操作结果:若是为空栈,则返回TRUE,否则返回FALSE。Traverse(&s,void(*visit)()初始条件:栈s已存在。操作结果:依次遍历栈s中的元素,依次调用函数,一旦失败

6、,则操作失败。ADT stack2. 队列抽象数据类型定义ADT Queue数据对象:D=ai|aiElemset,i=1,2,3,n,n=0数据关系:R1=|ai-1,aiD,i=2, n基本操作:InitQueue(&q)操作结果:构造一个空队列Q。EnQueue(&q, e)初始条件:队列Q已存在。操作结果:插入元素e为Q的新的队尾元素。QueueLenth(&q)初始条件:队列已存在。操作结果:返回Q的元素个数,即队列的长度。DeQueue(&q, &e)初始条件:队列已存在。操作结果:删除Q的队尾元素,并用e返回其值。QueueEmpty(&q)初始条件:队列Q已存在。操作结果:若Q

7、为空队列,则返回TRUE,否则返回FALSE.ClearQueue(&q)初始条件:队列Q已存在。操作结果:清空队列Q。DestoryQueue(&q)初始条件:队列Q已存在。操作结果:队列Q被销毁。不再存在。QueueTraverse(&q,Status(*visit)()初始条件:队列Q已存在。操作结果:依次遍历队列Q的元素,依次调用函数,一旦失败,则操作失败。ADT Queue流程图如下:本程序主要包括以下几个模块:主程序模块: int main()GhostLanage();printf(nt按任意键退出nn);各子程序模块: /*初始化栈*/void InitStack(SeqSta

8、ck *s)s-top=-1;/*进栈操作*/void Push(SeqStack *s,StackElementType x)if(s-top=Stack_Size-1) printf(nt栈已满! );else s-top+;s-elems-top=x;/*出栈操作*/void Pop(SeqStack *s,StackElementType *x)if(s-top=-1)printf(nt栈为空! );else *x=s-elems-top;s-top-;/*取栈顶元素*/void GetTop(SeqStack *s,StackElementType *x)if(s-top=-1)pr

9、intf(nt栈为空! );else *x=s-elems-top;/*判断栈是否为空*/int IsEmpty(SeqStack *s)if(s-top=-1) return(0);else return(1);/*魔王语言翻译函数*/void GhostLanage()SeqStack B,A,s,B1,A1,r,M;StackElementType ch,ch1,ch2,x;char aa100;int choice,i=0,n;InitStack(&B);InitStack(&A);InitStack(&s);InitStack(&r);InitStack(&M);printf(魔王语

10、言的转换形式: B-tAdA A-sae);Push(&B,t);Push(&B,A);Push(&B,d);Push(&B,A);Push(&A,s);Push(&A,a);Push(&A,e);printf(n请输入要翻译的魔王语言:n);scanf(%s,aa);for(i=0;aai!=0;i+)Push(&s,aai);while(IsEmpty(&s)Pop(&s,&ch); if(ch=B) B1=B; while(IsEmpty(&B1) Pop(&B1,&ch1); if(ch1=A) A1=A; while(IsEmpty(&A1) Pop(&A1,&ch2); Push(

11、&r,ch2); else Push(&r,ch1); else if(ch=A) A1=A; while(IsEmpty(&A1) Pop(&A1,&ch2); Push(&r,ch2); else if(ch=) Pop(&s,&ch2); while(ch2!=() Push(&M,ch2); Pop(&s,&ch2); GetTop(&M,&ch2); x=ch2; Pop(&M,&ch2); while(IsEmpty(&M) Push(&r,x); Pop(&M,&ch2); Push(&r,ch2); Push(&r,x); else Push(&r,ch);M=r;printf

12、(nnt翻译的结果为: );while(IsEmpty(&M) Pop(&M,&ch); printf(%c,ch); printf(nnt是否继续翻译为汉语:( 1-继续,0-不继续));scanf(%d,&n);if(n=1) printf(nnt翻译为汉语的结果为: nnt); M=r; while(IsEmpty(&M) Pop(&M,&ch); if(ch=t) printf(天); else if(ch=d) printf(地); else if(ch=s) printf(上); else if(ch=a) printf(一只); else if(ch=e) printf(鹅);

13、else if(ch=z) printf(追); else if(ch=g) printf(赶); else if(ch=x) printf(下); else if(ch=n) printf(蛋); else if(ch=h) printf(恨); printf(n);else ;模块间的关系是:主程序翻译函数1翻译函数2栈模块 四、详细设计本程序中的主要函数有:void InitStack(SeqStack *s);/*初始化栈*/void Push(SeqStack *s,StackElementType x); /*进栈操作*/void Pop(SeqStack *s,StackElementType *x);/*出栈操作*/void GetTop(SeqStack *s,StackElementType *x);/*取栈顶元素*/int IsEmpty(SeqStack *s);/*判断栈是否为空*/void GhostLanage();/*魔王语言翻译函数*/函数间的调用关系:主程序调用魔王语言翻译函数,然后魔王语言翻译函数调用其它的函数(初始化栈,

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

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