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

1.魔王语言解释

问题描述:魔王的语言精练而抽向,将他的语言按如下规则可转换成人的语言:(1) B转换为tAdA;(2) A转换为sae;(3) (qd1d2……dn)转换为qdn……qd2qd1q。输入魔王语言,输出人的语言。
例:输入数据为:

ab(sAxBq)B

输出为:

absqstsaedsaesxssaestsaedsae

用C写

/*************************************************************************> File Name: mo2.cpp> Author: kwh > Mail: > Created Time: 2019年12月12日 星期四 20时32分40秒************************************************************************/#include <iostream>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;stack <char> s;
queue <char> q;
const int MAX_SIZE = 100;int main () {char data;char s1[105];cin >> s1;for (int i = 0 ; i < strlen(s1); i++) {q.push (s1[i]);}while (!q.empty()) {if (q.front() == 'A') {cout << "sae";} else if (q.front() == 'B') {cout << "tsaedsae";} else if (q.front() == '(') {q.pop();data = q.front();q.pop();while (q.front() != ')') {s.push(q.front());q.pop();}while (!s.empty()) {if (s.top() == 'A') {cout << data << "sae";} else if (s.top() == 'B') {cout << data << "tsaedsae";} else cout << data << s.top();//cout << data << s.top();s.pop();}cout << data;} else if (q.front() == ')') {q.pop();} else cout << q.front();q.pop();}cout << endl;return 0;
}

面向对象封装

/*************************************************************************> File Name: test.cpp> Author: kwh > Mail: > Created Time: 2019年12月16日 星期一 18时04分17秒************************************************************************/#include <iostream>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
const int MAX_SIZE = 100;typedef int Status;
typedef char SElemType;
typedef char QElemType;#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define MAXSIZE 11class SqStack {private :SElemType *base;SElemType *top;int stacksize;public :Status InitStack (SqStack *S);Status Push (SqStack *S, SElemType e);Status Pop (SqStack *S, SElemType &e);
};typedef struct QNode {QElemType data;struct QNode *next;
} Qnode, *QueuePtr;class LinkQueue {private :QueuePtr front;QueuePtr rear;public :Status InitQueue (LinkQueue &Q);Status EnQueue (LinkQueue Q, QElemType e);Status DeQueue (LinkQueue &Q, QElemType &e);
};Status SqStack :: InitStack (SqStack *S) {base = (SElemType *) malloc (STACK_INIT_SIZE * sizeof (SElemType));if (!base) exit(OVERFLOW);top = base;stacksize = STACK_INIT_SIZE;return OK;
}//入栈
Status SqStack :: Push (SqStack *S, SElemType e) {if (top - base >= stacksize) {base = (SElemType *) realloc (base, (stacksize + STACK_INIT_SIZE) * sizeof (SElemType));if (!base) exit (OVERFLOW);top = base + stacksize;stacksize += STACKINCREMENT;}*top++ = e;return OK;
}//删除栈顶元素
Status SqStack :: Pop (SqStack *S, SElemType &e) {if (top == base) return ERROR;e = * --top;return OK;
}//初始化队列
Status LinkQueue :: InitQueue (LinkQueue &Q) {front = rear = (QueuePtr) malloc (sizeof (QNode));if (!front) exit (OVERFLOW);front -> next = NULL;return OK;
}//入队
Status LinkQueue :: EnQueue (LinkQueue Q, QElemType e) {QNode *p = (QueuePtr) malloc (sizeof (QNode));if (!p) exit (OVERFLOW);p -> data = e;p -> next = NULL;rear -> next = p;rear = p;return OK;
}//出队
Status LinkQueue :: DeQueue (LinkQueue &Q, QElemType &e) {if (front == rear) return ERROR;QNode *p = front -> next;e = p -> data;front -> next = p -> next;if (rear == p) rear = front;free (p);return OK;
}int main () {char data;char s1[MAX_SIZE];SqStack s;LinkQueue q;q.InitQueue (q);s.InitStack (&s);cout << "输入数据为:    ";cin >> s1;/*int i = 0;while ((c = getchar()) != '#') {s1[i] = c;i++;}*/for (int j = 0; j < strlen(s1); j++) {q.EnQueue (q, s1[j]);}cout << "输出为:        ";while (q.DeQueue (q, data)) {if (data == 'A') {cout << "sae";// printf ("sae");} else if (data == 'B') {//printf ("tsaedsae");cout << "tsaedsae";} else if (data == '(') {q.DeQueue (q, data);char temp = data;q.DeQueue (q, data);while (data != ')') {s.Push (&s, data);q.DeQueue (q, data);}while (s.Pop(&s, data)) {if (data == 'A') {cout << temp << "sae";} else if (data == 'B') {cout << temp << "tsaedsae";} else cout << temp << data;}cout << temp;} else if (data == ')') {q.DeQueue (q, data);} elsecout << data;}cout << endl;return 0;
}

算法流程图

运行结果截图

魔王语言解释(数据结构课程设计)相关推荐

  1. 跳棋的C语言,跳棋游戏C语言程序设计(数据结构课程设计).doc

    跳棋游戏C语言程序设计(数据结构课程设计).doc 跳棋程序设计李雄志学号2012214157数学与应用数学12-1班1. 问题描述:2. 程序分析:3. 程序算法:4. 思考感悟.一,问题描述题目要 ...

  2. 猴子吃桃问题c语言链表,数据结构课程设计--猴子吃桃子问题.doc

    Data organization curriculm project 数据结构课程设计 设计题目: 猴子吃桃子问题 专业班级: 通信工程0804班 学生学号: 0909082421 学生姓名: 王 ...

  3. C语言及数据结构课程设计:超市信息管理系统

    这是大一做的一个课程设计,用到C语言和数据结构方面的知识,级别为优.代码备注较为详细,加了一些课程外的小操作以及考虑到了实际运用情况进行了补充,我把源码和演示文档及数据库都放在一起了,能直接使用,需要 ...

  4. 基于C语言的数据结构课程设计(学生管理系统、停车场管理、家谱管理、校园导航系统)

    一.设计目的 本课程设计是软件工程学生的必修课程,数据结构与算法课程设计既是一门基础课程,又是一门实践性课程.通过本实训课程的学习和训练,使同学学会分析研究数据对象的特性,学会数据的组织方法,以便选择 ...

  5. 数据结构课程设计(魔王语言(c语言)的简单代码)

    设计思想:此代码写的相对简单,思路易懂,用到的是栈和队列的思想,主要是对数据结构初学者起到一个参考作用: 问题描述:有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没有人能昕得懂,但他的语言是可 ...

  6. 设树采用孩子兄弟表示法存放.用类c语言设计算法计算树的高度.,(数据结构课程设计分类题目.doc...

    (数据结构课程设计分类题目 线性表 顺序表: 1.设有一元素为整数的线性表L=(a1,a2,a3,-,an),存放在一维数组A[N]中,设计一个算法,以表中an作为参考元素,将该表分为左.右两部分,其 ...

  7. c语言小数表达式运算课程设计,数据结构课程设计表达式计算.doc

    数据结构课程设计表达式计算 福建农林大学计算机与信息学院 计算机类 课程设计报告 课程名称:算法与数据结构课程设计题目:表达式计算姓 名:系:数学系专 业:数学与应用数学年 级:学 号:指导教师:宁正 ...

  8. 学生搭配问题数据结构报告c语言,数据结构课程设计_学生搭配问题.doc

    数据结构课程设计_学生搭配问题 数据结构课程设计 题 目: 学生搭配问题 学 院: 班 级: 学 生 姓 名: 学 生 学 号: 指 导 教 师: 2012 年 12 月 3 日 课程设计任务书 姓名 ...

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

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

最新文章

  1. C#——WPF的菜单栏、工具栏、状态栏DEMO
  2. Microsoft Visual Studio 正忙
  3. 36 | 套路篇:怎么评估系统的网络性能?
  4. java ssm使用存储过程_java调用oracle存储过程(ssm)
  5. 全面解析 Netflix 的微服务架构设计
  6. Tensorflow Serving Docker compose 部署服务细节(Ubuntu)
  7. Linux实战 | 搭建Linux(CentOS6.8版)_1
  8. asp.net listview 字段太多 滚动条_高考英语阅读理解生僻单词太多怎么办?十大招数帮到你...
  9. C++_实现一个简单的智能指针shared_ptr
  10. SET-Priority_Queue
  11. JDK有三种字体绘制系统
  12. activitygroup
  13. 基于STM32设计的WiFi语音播报日程表
  14. 慕课网-前端课程学习完成
  15. vivado error:Multiple declarations of unsigned included via multiple use clauses
  16. 苹果手机计算机软件删了怎么再装,iphone用itunes重装手机系统的方法 iphone如何重装系统...
  17. 怎样在Mac上为 Apple ID 设置双重认证?
  18. 云虚拟主机数据库连接和url重写
  19. 因特网上的英语学习资源
  20. Oracle数据库打补丁方法

热门文章

  1. 利用redissyncer实现数据双向同步
  2. (转)手把手教你写专利申请书•如何申请专利
  3. 海外专利紧缺 中国IT企业国际化维艰
  4. 三维目标检测---PartA2论文解读
  5. 虚拟机和本机拷贝数据:
  6. hihoCoder:#1082 然而沼跃鱼早就看穿了一切
  7. C/C++ Eeny Meeny Moo
  8. JVM面试八股文第一弹
  9. Android清洁架构(一)
  10. ts没有与此调用匹配的重载