版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
[数据结构]魔王语言解释c语言实现[基本要求]
用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量。魔王语言可含人的词汇。
(1)B->tAdA
(2)A->sae
[测试数据]
B(ehnxgz)B解释成tsaedsaeezegexenehetsaedsae【实现】将需要解释的魔王语言当成一个字符数组,入栈1。再依次出栈,入栈2,依次处理顶端字符,若是开括号逐一出栈入队列,直至闭括号出栈。再逐一出队列,按照规则2解释,再重新入栈2。出栈2,按照规则1解释。#include<stdio.h>#include<stdlib.h>#include<string.h>#include<malloc.h>typedefstructNode//节点{chardata;structNode*next;}Node,*NodePtr;typedefstructStak //栈链表{NodePtrtop;NodePtrbot;intcount;}Stak;//初始化栈voidInitStak(Stak*ts) {ts->top=(NodePtr)malloc(sizeof(Node));if(NULL==ts->top){printf("分配失败");exit(-1);}ts->bot=ts->top;ts->count=0;ts->top->next=NULL;}//入栈voidPush(Stak*S,chare) {NodePtrpnew=(NodePtr)malloc(sizeof(Node));pnew->data=e;pnew->next=S->top;S->top=pnew;S->count++;}//出栈charPop(Stak*S) {NodePtrp;if(S->bot==S->top){//空时返回1删除失败exit(1);}p=S->top;chare=p->data;S->top=S->top->next;free(p);S->count--;returne;}//打印栈voidprin(Stak*S){NodePtrp;p=S->top;while(p!=S->bot){printf("%c\n",p->data);p=p->next;}}boolEmptyStack(Stak*S)//判断是否空栈{if(S->count==0)return1;return0;}typedefstructQNode //队列节点{chardata;structQNode*next;}QNode,*QNodePtr;typedefstructLinkQueue //队列链表{QNodePtrfront,rear;}Queue;//队列初始化voidInitQue(Queue*Q){QNodePtrp=(QNodePtr)malloc(sizeof(QNode)); //p为头节点p->data=NULL;p->next=NULL;Q->front=p;Q->rear=p;}//入队列voidEnQue(Queue*Q,chare){QNodePtrp=(QNodePtr)malloc(sizeof(QNode));p->data=e;p->next=NULL;Q->rear->next=p;Q->rear=p;}charDeQue(Queue*Q)//出队列{QNodePtrp;charc;if(Q->front==Q->rear){//空时exit(1);}p=Q->front->next;c=Q->front->next->data;Q->front->next=p->next;if(p==Q->rear){Q->rear=Q->front;}free(p);returnc;}voidpri(Queue*Q)//打印队列{QNodePtrp;p=Q->front;if(p!=NULL){while(p!=Q->rear){printf("%c",p->next->data);p=p->next;}}}boolEmptyQue(Queue*Q){if(Q->front==Q->rear)return1;return0;}voidReverse(charM[],Stak*S){inti;intlen=strlen(M);intl=0,r=0;for(i=0;i<len;i++){Push(S,M[i]);if(M[i]=='(')l++;if(M[i]==')')r++;}if(l!=r)exit(1);}voidEnA(Queue*Q)//规则1{EnQue(Q,'s');EnQue(Q,'a');EnQue(Q,'e');}voidEnB(Queue*Q)//规则1{EnQue(Q,'t');EnA(Q);EnQue(Q,'d');EnA(Q);}voidFpri(Queue*Q){charc;while(!EmptyQue(Q)){c=DeQue(Q);switch(c){case't':printf("天");break;case'd':printf("地");break;case's':printf("上");break;case'a':printf("一只");break;case'e':printf("鹅");break;case'z':printf("追");break;case'g':printf("赶");break;case'x':printf("下");break;case'n':printf("蛋");break;case'h':printf("恨");break;default:printf("Error");}}}voidTran(Stak*Sbe,Stak*Saf,Queue*Q){charc;chard;inti=0;while(Sbe->count!=0){c=Pop(Sbe);if(c==')')i=Saf->count;elseif(c=='('){intj=Saf->count;while(j>i){d=Pop(Saf);EnQue(Q,d);j--;}chare=Q->front->next->data;DeQue(Q);while(!EmptyQue(Q))//规则2{chardl=DeQue(Q);Push(Saf,e);Push(Saf,dl);}Push(Saf,e);}elsePush(Saf,c);}while(Saf->count>0){charen;en=Pop(Saf);if(en=='A')EnA(Q);elseif(en=='B')EnB(Q);elseEnQue(Q,en);}Fp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某著名企业经纪人岗前辅导P14
- 某著名企业-华融地产建议书
- 《GBT 14593-2008山羊绒、绵羊毛及其混合纤维定量分析方法 扫描电镜法》专题研究报告
- 《GBT 21728-2008砖茶含氟量的检测方法》专题研究报告
- 《GBT 15192-2008纺织机械用图形符号》专题研究报告
- 道路安全专题培训内容课件
- 2025-2026年苏教版初三化学上册期末考试题库(附含答案)
- 道德课件介绍
- 2026年广东省湛江市高职单招语文试题解析及答案
- 迪拜港口介绍
- 开曼群岛公司法2024版中文译本(含2024年修订主要内容)
- 贵阳市普通中学2023-2024学年度高一第一学期数学期末监测考试试卷
- 湘教 八下 数学 第2章《平行四边形的判定》课件
- 骨科技能操作流程及评分标准
- 控制区人员通行证件考试1附有答案
- 2016-2023年北京财贸职业学院高职单招(英语/数学/语文)笔试历年参考题库含答案解析
- 《思想道德与法治》
- 沪教版生物科学八年级上册重点知识点总结
- 汽车美容装潢工(四级)职业资格考试题库-下(判断题汇总)
- 焊缝的图示法
- 2020年云南省中考英语试卷真题及答案详解(含作文范文)
评论
0/150
提交评论