还剩10页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
题目魔王语言解释[问题描述]有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没有人能听懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的1a-3132……3m206162……5—0506-l……0519n nn在这两种形式中,从左到右均表示解释试写一个魔王语言的解释系统,把他的话解释成人能听得懂的话;[基本要求]用下述两条具体规则和上述规则形式实现设大写字母表示魔王语言的词汇;2小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量魔王语言可含人的词汇1B-tAdA2A-sae[测试数据]解释成B ehnxgzB tsaedsaeezegexenehetsaedsae若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是“天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”T dS ae Zg Xn h地鹅天上只追赶蛋恨--------[实现提示]将魔王的语言自右至左进栈,总是处理栈顶字符若是开括号,则逐一出栈,将字母顺序入队列,直至闭括号出栈,并按规则要求逐一出队列再处理后入栈其他情形较简单,请读者思考应如何处理应首先实现栈和队列的基本操作whileel!=,,{EnQueueQ,el;PopS,el;}if!QueueEmptyQ{DeQueueQ,key;else{Pushtemp el;9f=0;}{〃边处理边进栈while!StackEmptytempPoptemp,el;{〃把括号外的元素压入中ifel!=flagPusgel;}else{{〃处理括号中的元whiIe!QueueEmptyQ素进栈DeQueueQ,e2;PushS,key;PushS,e2;{〃最后还要压一个iff!=O keyPushS,key;printf「解释后的语言为\nn;{〃依次出栈输出处理后的元素while!StackEmptySPopS,e;〃元素进队是为了输出对应汉字EnQueueQ,e;if==fB,{eprintfH%s,\B;}else ife==A{printfH%s,\A;elseprintfH%c,\e;[源代码]#includestdio.h#includestdlib.h#define STACKJNIT.SIZE100#define STACK_INCREMENT10struct Stack{char*base;char*top;int stacksize;;{〃构造栈void InitStackstruct Stack ss.base=char^mallocSTACK_INIT_SIZE^sizeofchar;s.top=s.base;s.stacksize=STACK INITSIZE;{〃压入元素void Pushstruct Stack schar e9ifs.top-s.base=STACK_INIT_SIZE{s.base=char*reallocs.baseXs.stacksize+STACK_INCREMENT5sizeofchar;s.top=s.base+s.stacksize;s.stacksize+=STACK INCREMENT;*s.top=e;s.top++;}{〃取出元素void PopstructStack s,char ee=*-s.top;{〃栈是否为空int StackEmptystructStack sifs.top==s.base{return1;else{return0;}void ClearStackstructStack s{s.top=s.base;struct Queue{char data;struct Queue*next;;struct LinkQueue{struct Queue*front;struct Queue*rear;;{〃构造队void InitQueuestruct LinkQueue qq.front=q.rear=struct Queue^mallocsizeofstruct Queue;q.front-next=NULL;{〃元素入队void EnQueuestructLinkQueue q,char estruct Queue*p;p=structQueue*mallocsizeofstruct Queue;p-data=e;p-next=NULL;q.rear-next=p;q.rear=p;{〃元素出队void DeQueuestructLinkQueue q,char estructQueue*p;p=q.front-next;e=p-data;q.front-next=p-next;ifq.rear==p{q.rear=q.front;freep;}{〃队是否为空int QueueEmptystructLinkQueue qifq.front==q.rear{return1;elsereturn0;{〃把字符数组从右至左压入栈中void InStackchar^ch,structStacksint i,L=0;whilech[L]!=,\0,{L++;fori=L-l;i=0;i—{Pushs,ch[i];int main{int i=0;char A[]=Hsaen;char B[]=ntsaedsaeH;printf**\n”;char flag=,O,;//flag用来标记处理括号printf*int mark=l;printf**\n”;int f=0;print**printf*,,;*\nstruct StackS;〃用来处理括号外的元素structStacktemp;InitStackS;InitStacktemp;structLinkQueueQ;InitQueueQ;char MoWang
[100]=n\0n;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|.r
1.rj.rj.rj*rj*r|.rj.rj.rj*rj rjw rj.rj.rj*rj*rj*r|.r
1.rj.rj.rj*rj*r|.rj.rj.rj*rj rjw rj.rj.rj*rj*rj*r|.r
1.r
1.;\nprintfH欢迎光临广东工业大学^1*«£•■小rj*rj*rj*rj*rj*rj*rj*r|*r|wrj*rj*rj*rj*r|*r|*rj*rj^rj*rj*rj*rj*rj*rj**魔王语言解释系统*«A»r1*rj*r|*rj*r|rj*rjwrj rj*rj*rj*r|rj^rj*rj*r|*rj*班级:计算机学院网络工程级班20074姓名黄文龙学号3107007087|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*rjwrj rj rj rj rjwrj ejJ[•rj*rj rj*rj*[,rj*rj rjwrj ejrj[—rj«rjrjej,rj*rj*rj*rj*rj*rj・rj*rj*rjrj[•rj*rj«rjrj\n\nn;「请输入你想要解释的魔王语言(最多含有一个括号))printf\n”;getsMoWang;〃把要解释的魔王语言压入栈中InStackMoWang,S;while!StackEmptyS{printfPopS,el;ifel==,t{ifStackEmptyS{魔王语言错误!;printf\nmark=0;break;while!StackEmptyS{PopS,el;if el=={f=l;break;else if!el=,a,el=tz,!el=,Atel=,Z,{魔王语言错误!priiHf\n;mark=O;break;ifmark==O{break;iff!=l{printf“魔王语言错误!\nn;break;}else ifel==,,{「魔王语言错误!;printf\nmark=O;break;else if!el=,a,el=,zt!el=,A,el=,Z,{printf魔王语言错误!\nu;mark=O;break;}ifmark==lf==l{ClearStackS;InStackMoWang,S;{〃栈不空时while!StackEmptySPopS,el;ifel==tB,{Pushtemp,el;}else ifel==,A,{Pushtemp,el;{〃用队存储括号中的元素else ifel==T〃有括号的话就用标Pushtemp,flag;flagPopS,el;。
个人认证
优秀文档
获得点赞 0