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

上传人:太** 文档编号:97696144 上传时间:2024-06-24 格式:DOCX 页数:12 大小:18.98KB
返回 下载 相关 举报
数据结构 课程设计报告 魔王语言解释.docx_第1页
第1页 / 共12页
数据结构 课程设计报告 魔王语言解释.docx_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《数据结构 课程设计报告 魔王语言解释.docx》由会员分享,可在线阅读,更多相关《数据结构 课程设计报告 魔王语言解释.docx(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、题目:魔王语言解释问题描述有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没有人能听懂, 但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式 的规则由人的语言逐步抽象上去的:(1) a-3 1323m (2) ( 0 6 1 6 25n) 0 5n0 6 n-l0519在这两种形式中,从左到右均表示解释。试写一个魔王语言的解释系统,把 他的话解释成人能听得懂的话;基本要求用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言 的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母 代换的变量。魔王语言可含人的词汇。(1) B-tAdA(2)

2、 A-sae测试数据B (ehnxgz) B 解释成 tsaedsaeezegexenehetsaedsae若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是:“天上一 只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。TdSaeZgXnh天地上只鹅追赶蛋恨实现提示将魔王的语言自右至左进栈,总是处理栈顶字符。若是开括号,则逐一出栈, 将字母顺序入队列,直至闭括号出栈,并按规则要求逐一出队列再处理后入栈。 其他情形较简单,请读者思考应如何处理。应首先实现栈和队列的基本操作。while(el!=,),)EnQueue(Q,el);Pop(S,el);if(!QueueEmpty(Q

3、)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); 元素进队是为了输出对应汉

4、字if(e=fB,)printf(H%s,B);else if(e=A)printf(H%s,A);) else(printf(H%c,e);源代码#include#include#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=ST

5、ACK 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

6、 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.fr

7、ont-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;)fr

8、ee(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 Sta

9、ck 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, 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

10、* 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班姓名:黄文龙 学号:3107007087pri

11、ntf(| f *#*2*2 *2 *2*2 *2*2 *2*2 *2 2* *2* *1*2 *2*#2 * *f#*# *2 2*# rj* rj* rj* rj* rj* rj rj* rjw rj rj rj rj rjw rj ej 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 rjnnn);printf请输入你想要解释的魔王语言(最多含有一个括号):n”);gets(MoWang);InStack(MoWang,S); 把要解释的魔王语

12、言压入栈中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=,At&el=,a,&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);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

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

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