




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
[数据结构]魔王语言解释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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 互联网+在仪器仪表行业的应用案例考核试卷
- 废弃物肥料化处理经济效益分析考核试卷
- 保健品市场社会责任信息披露规范考核试卷
- 财务部门个人2024年终工作总结(30篇)
- 印刷品设计的创意与创新考核试卷
- 财务会计求职信11篇 关于财务会计岗位的求职信
- 2025年中国PU高固透明底漆数据监测研究报告
- 2025年中国LCD模块数据监测研究报告
- 2025年中国EAS服务器系统数据监测报告
- 2025年中国90°内丝卡套弯头数据监测研究报告
- 2024年江西省公安厅招聘警务辅助人员考试真题
- 2025年湖北省中考英语真题含答案
- 砂石销售提成管理制度
- 2025年湖南省中考生物试卷及答案
- 2025至2030中国地效飞行器行业产业运行态势及投资规划深度研究报告
- 2025年四川省眉山市中考化学试卷及答案
- 2025年重庆市中考语文试卷(含解析)
- 2025年湖北省普通高中学业水平合格性考试模拟(三)历史试题(含答案)
- 广东省中山市2023-2024学年八年级下学期语文期末试卷(含答案)
- 2025至2030中国处方呼吸药物行业发展趋势分析与未来投资战略咨询研究报告
- 2025年河南高考真题化学试题含答案
评论
0/150
提交评论