欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:97696144       资源大小:18.98KB        全文页数:12页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    题目:魔王语言解释问题描述有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没有人能听懂, 但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式 的规则由人的语言逐步抽象上去的:(1) a->3 1323m (2) ( 0 6 1 6 25n) >0 5n0 6 n-l0519在这两种形式中,从左到右均表示解释。试写一个魔王语言的解释系统,把 他的话解释成人能听得懂的话;基本要求用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言 的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母 代换的变量。魔王语言可含人的词汇。(1) B->tAdA(2) A->sae测试数据B (ehnxgz) B 解释成 tsaedsaeezegexenehetsaedsae若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是:“天上一 只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。TdSaeZgXnh天地上只鹅追赶蛋恨实现提示将魔王的语言自右至左进栈,总是处理栈顶字符。若是开括号,则逐一出栈, 将字母顺序入队列,直至闭括号出栈,并按规则要求逐一出队列再处理后入栈。 其他情形较简单,请读者思考应如何处理。应首先实现栈和队列的基本操作。while(el!=,),)EnQueue(Q,el);Pop(S,el);if(!QueueEmpty(Q)DeQueue(Q,key);)elsePush(temp9el);f=0;)while(!StackEmpty(temp)边处理边进栈Pop(temp,el);if(el !=flag)把括号外的元素压入中Pusgel);elsewhiIe(!QueueEmpty(Q)处理括号中的元素进栈DeQueue(Q,e2);Push(S,key);Push(S,e2);if(f!=O)最后还要压一个keyPush(S,key);)printf解释后的语言为:nn);while(!StackEmpty(S)依次出栈输出处理后的元素Pop(S,e);EnQueue(Q,e); 元素进队是为了输出对应汉字if(e=fB,)printf(H%s,B);else if(e='A')printf(H%s,A);) else(printf(H%c,e);源代码#include<stdio.h>#include<stdlib.h>#define STACKJNIT.SIZE 100#define STACK_INCREMENT 10struct Stackchar* base;char* top;int stacksize;);void InitStack(struct Stack &s)构造栈s.base=(char)malloc(STACK_INIT_SIZEsizeof(char);s.top=s.base;s.stacksize=STACK INIT SIZE;)void Push(struct Stack &s9char e)压入元素if(s.top-s.base>=STACK_INIT_SIZE)s.base=(char*)realloc(s.baseXs.stacksize+STACK_INCREMENT):5:sizeof(char);s.top=s.base+s.stacksize;s.stacksize+=STACK INCREMENT;)*(s.top)=e;s.top+;void Pop(struct Stack &s,char &e)取出元素 e=*-s.top;)int StackEmpty(struct Stack s)栈是否为空if(s.top=s.base)return 1;)elsereturn 0;)void ClearStack(struct Stack &s) s.top=s.base;)struct Queuechar data;struct Queue* next;);struct LinkQueuestruct Queue* front;struct Queue* rear;);void InitQueue(struct LinkQueue &q)构造队q.front=q.rear=(struct Queue)malloc(sizeof(struct Queue);q.front->next=NULL;)void EnQueue(struct LinkQueue &q,char e)元素入队struct Queue* p;p=(struct Queue*)malloc(sizeof(struct Queue);p->data=e;p->next=NULL;q.rear->next=p;q.rear=p;)void DeQueue(struct LinkQueue &q,char &e)元素出队struct Queue* p;p=q.front->next;e=p->data;q.front->next=p->next;if(q.rear=p)q.rear=q.front;)free(p);int QueueEmpty(struct LinkQueue q)队是否为空if(q.front=q.rear)return 1;)else(return 0;)void InStack(char ch,struct Stack &s)把字符数组从右至左压入栈中int i,L=0;while(chL!=,0,)L+;)for(i=L-l;i>=0;i)Push(s,chi);int main()int i=0;char A=Hsaen;char B=ntsaedsaeH;char flag=,O,;/flag用来标记处理括号int mark=l;int f=0;struct Stack S;struct Stack temp;用来处理括号外的元素InitStack(S);InitStack(temp);struct LinkQueue Q;InitQueue(Q);char MoWang100=n0n;char el,key,e2,e; a / f f -J>.上«£« .J*7*7,<2* !*, * rj* rj* r|. rj. rj. rj* rj* r|. rj. rj. rj. rj* rj> rjw rj. rj. rj* rj* rj* r|. r1. rj. rj. rj* rj* r|. rj. rj. rj* rj> rjw rj. rj. rj* rj* rj* r|. r1. rj. rj. rj* rj* r|. rj. rj. rj* rj> rjw rj. rj. rj* rj* rj* r|. r1. r1.n'');printf(H欢迎光临广东工业大学printf(''*n”);printf(''*printf(''*n”);print*"*printf(''*n,);1* «£ 小rj* rj* rj* rj* rj*rj* rj* r|* r|w rj* rj* rj* rj* r|* r|* rj*rj rj* rj* rj* rj* rj* rj* 魔王语言解释系统 *«A» r1* rj* r|*rj* r|> rj* rjw rj> rj* rj* rj* r|>rj rj* rj* r|* rj*班级:计算机学院网络工程2007级4班姓名:黄文龙 学号:3107007087printf(| f *#*2*2 *2 *2*2 *2*2 *2*2 *2 2* *2* *1*2 *2*#<2 <2#*2 *2 *2>* *f#*£# *2 <2*# <2* *!> rj* rj* rj* rj* rj* rj> rj* rjw rj> rj> rj> rj> rjw rj> ej> <J> rj* rj> rj* rj* , rj* rj> rjw rj> ej> rj> rj« rj> rj> ej, rj* rj* rj* rj* rj* rj rj* rj* rj> rj> rj* rj« rj> rj>nnn);printf请输入你想要解释的魔王语言(最多含有一个括号):n”);gets(MoWang);InStack(MoWang,S); 把要解释的魔王语言压入栈中while(!StackEmpty(S)Pop(S,el);if(el=,(t)if(StackEmpty(S)printf("魔王语言错误!n");mark=0;break;)while(!StackEmpty(S)Pop(S,el);if(el=')')f=l;break;)else if(!(el>=,a,&&el<=tz,)&&!(el>=,At&&el<=,Z,)priiHf("魔王语言错误! n");mark=O;break;)if(mark=O)break;)if(f!=l)printf(“魔王语言错误! nn);break;)else if(el=,),)printf魔王语言错误! n");mark=O;break;)else if(!(el>=,a,&&el<=,zt)&&!(el>=,A,&&el<=,Z,)printf("魔王语言错误! nu);mark=O;break;)if(mark=l&&f=l)ClearStack(S);InStack(MoWang,S);while(!StackEmpty(S)栈不空时Pop(S,el);if(el=tB,)Push(temp,el);else if(el=,A,)Push(temp,el);)else if(el=T)用队存储括号中的元素Push(temp,flag);有括号的话就用flag标Pop(S,el);

    注意事项

    本文(数据结构 课程设计报告 魔王语言解释.docx)为本站会员(太**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开