title: 魔王语言解释
date: 2022-05-13 17:39:53
tags: C语言
categories: 数据结构

问题输入
一组数据,数据为一个字符串,表示一个待翻译的字符串。
转化规则
用下述两条具体规则和上述规则形式实现。设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量。魔王语言可含人的词汇。
(1)B -> tAdA
(2)A -> sae
问题输出
将字符串按规则翻译后输出。
输入样例
B(pxyzABhij)B
输出样例
tsaedsaepjpiphptsaedsaepsaepzpypxptsaedsae

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxsize 100
typedef struct{char *base;char *top;int size;
}sqStack;
//构造栈
int InitStack(sqStack *S){S->base=(char *)malloc(sizeof(char)*maxsize);if(!S->base) exit(0);S->size=maxsize;S->top=S->base;return 1;
}
//出栈
int GetTop(sqStack *S,char *c){if(S->top==S->base) return 0;else *c=*--S->top;return 1;
}
//入栈
int Push(sqStack *S,char c){*S->top++=c;return 1;
}
typedef struct QNode * LNode;
struct QNode{char data;LNode next;
};
typedef struct{LNode front;  //队头指针 LNode rear;   //队尾指针
}LinkQueue;
//构造队列
int InitQueue(LinkQueue *Q){Q->front=Q->rear=(LNode)malloc(sizeof(struct QNode));Q->front->next=NULL;return 1;
}
//入队
int PushQueue(LinkQueue *Q,char c){LNode p=(LNode)malloc(sizeof(struct QNode));p->data=c;p->next=NULL;Q->rear->next=p;Q->rear=p;return 1;
}
//出队
int GetQueue(LinkQueue *Q,char *c){if(Q->rear==Q->front) return 0;LNode p=Q->front->next;*c=p->data;Q->front->next=p->next;if(Q->rear==p) Q->rear=Q->front;return 1;
}
int main(){char st[1000],a;scanf("%s",st);//puts(st);sqStack S1,S2;LinkQueue L;InitQueue(&L);InitStack(&S1);InitStack(&S2);//将字符串从右向左依次入栈 for(int i=(strlen(st)-1);i>=0;i--){Push(&S1,st[i]);}  //处理括号内容 while(S1.base!=S1.top){char r;GetTop(&S1,&r);if(r!=')'){Push(&S2,r);} else if(r==')'){char C;GetTop(&S2,&a);while(a!='('){PushQueue(&L,a);C=a;GetTop(&S2,&a);}while(L.front->next!=L.rear){char b;GetQueue(&L,&b);Push(&S2,C);Push(&S2,b);}Push(&S2,C);}}//B和A转化while(S2.base!=S2.top){char n;char A[4]="sae";char B[9]="tsaedsae";GetTop(&S2,&n);if(n!='A'&&n!='B'){Push(&S1,n);}else if(n=='A'){for(int i=2;i>=0;i--){Push(&S1,A[i]);}}else if(n=='B'){for(int i=7;i>=0;i--){Push(&S1,B[i]);}}} char m;while(S1.base!=S1.top){GetTop(&S1,&m);printf("%c",m);}
}

主要是考察栈和队列,建议画图解决。
欢迎关注博客LeoCache 更多学习资源

XDOJ魔王语言解释相关推荐

  1. 数据结构 -- 魔王语言解释

    这是数据结构的实验~~ 这是实现一个魔王语言解释器. 这里是采用栈,队列,线性表的综合实现的. 这个程序没上交,所以是中文注释的. 其实这个程序本身实用性不强,但是是个很不错的题目. Experime ...

  2. 数据结构习题集之魔王语言解释

    魔王语言解释 问题描述有 一个魔王总是使用自已的一种非常精练而抽象的语言讲话,没有人能听得懂. 但他的语言是可以逐步解释成人能懂的语言的,因为他的语言是由以下两种形式 的规则由人的语言逐步抽象上去的: ...

  3. 魔王语言解释C(可输出)

    魔王语言 魔王语言解释问题 问题 1.问题描述 有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没有人能听得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的 ...

  4. 数据结构|魔王语言解释

    魔王语言解释 一.需求分析 1.有一个魔王总是使用自己的一种非常精炼而抽象的语言讲话,没有人能听得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去 ...

  5. 魔王语言解释(数据结构课程设计)

    魔王语言解释(数据结构课程设计) 1.魔王语言解释 问题描述:魔王的语言精练而抽向,将他的语言按如下规则可转换成人的语言:(1) B转换为tAdA:(2) A转换为sae:(3) (qd1d2--dn ...

  6. 魔王语言解释 C++

    数据结构课的作业 [问题描述] 有一个魔王总是使用自己的一种非常精练而又抽象的语言讲话,没有人能听得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上 ...

  7. 数据结构课程设计---魔王语言解释

    [问题描述] 有一个魔王总是使用自己的一种非常精练而又抽象的语言讲话,没有人能听得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的: (1) α ...

  8. 数据结构课程设计:魔王语言解释

    1.[问题描述] 有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没有人能昕得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的: (1)α ...

  9. G-08 魔王语言解释 (20 分)

    有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没人能听的懂.但他的语言是可以逐步解释成人能懂得语言的,因为他的语言是由以下两种形式的规则由人的语言逐 步抽象上去的: α->β1β2-βn ...

最新文章

  1. 知否?知否?一文看懂深度文本分类之DPCNN原理与代码
  2. Hadoop控制输出文件命名
  3. Linux / openwrt / 安装 Web GUI 和 ftp server
  4. 中石油训练赛 - Russian Dolls on the Christmas Tree(树上启发式合并/主席树)
  5. 新一代消息队列 Pulsar
  6. 用matlab解一维单势垒波函数,一维多势垒结构准束缚态的MATLAB分析计算
  7. 同学的博客,没想到也这么多文章。
  8. python 时间模块 time datetime calendar
  9. ajax获取session值_cookie和session基础知识学习
  10. matlab处理最优化问题,matlab求最优化问题
  11. 安卓手机端口号怎么查看_安卓手机来电闪光灯怎么设置
  12. SSRF 漏洞危害大,应避免被利用攻击内网应用!| 原力计划
  13. 深井地下水监测测量仪
  14. c语言一维高斯滤波器,高斯滤波简介,高斯滤波性质及应用
  15. 配置FreeSWITCH支持不带媒体信息的SIP信令
  16. Windows防火墙命令行手册
  17. 【位置推iMessage苹果推送】 软件安装AVPlayerItem(URL: movieUrl) player
  18. 中国农业大学计算机考研复试分数线,2020中国农业大学考研复试分数线已公布...
  19. 【深度学习】图像分割的难点
  20. 终身免费!微软数据恢复工具,界面版体验

热门文章

  1. 在Java中计算各位数字立方和
  2. 利用PopButton实现类似Path的点聚式导航
  3. webshell管理之中国菜刀 蚁剑 WeBaCoo Weevely
  4. 【三维目标检测】Part-A2(一)
  5. java实现随机数抽奖_JAVA使用随机数实现概率抽奖
  6. linux操作系统基础北京邮电大学出版社,Linux操作系统与实训教程
  7. 信息系统集成解决医院系统
  8. php odbc连接池,修复︰ 使用连接池的 SQL Server ODBC 连接时设置的连接属性失败
  9. SLF4J: The requested version 1.5.8 by your slf4j binding is not compatible with [1.6] SLF4J: See htt
  10. ChatGPT原理解析以及使用方法介绍