版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
[数据结构]魔王语言解释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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大型设备租赁合同协商函(7篇)
- 2026新闻舆情面试题及答案
- 2026医疗互联网 面试题及答案
- 2026制程检验面试题及答案
- 我的中国梦:爱国主义教育小学主题班会课件
- 科技时代:探索未来的科技发展小学主题班会课件
- 产品上架推广通知函(4篇)
- 市场推广效果分析函20266篇
- 临川十中2026年教师招聘笔试模拟试题及答案详解
- 永丰县县直机关事业单位2026年面向社会公开招聘编外工作人员的(一)笔试备考题库及答案详解
- 船舶排污污染防控与海洋环保管理手册
- (2026年)小儿静脉输液外渗的预防及处理课件
- 垃圾焚烧电厂锅炉培训
- 2025版肺癌合并间质性肺疾病诊疗专家共识解读课件
- 《TB-T 1979-2023 机车车辆特种金属材料 耐大气腐蚀钢》
- 2026浙江台州市温岭市市场监督管理局招聘编外1人笔试参考题库及答案解析
- 2026年智能饮料机项目可行性研究报告
- 离子型稀土矿原地浸矿水污染控制标准编制说明
- 汽车美容转租合同范本
- DB34-T 5040-2025 建筑工程安全生产标准化工地评价标准
- 后备干部合同协议书
评论
0/150
提交评论