魔王语言解释(数据结构课程设计)
魔王语言解释(数据结构课程设计)
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;
}
算法流程图
运行结果截图
魔王语言解释(数据结构课程设计)相关推荐
- 跳棋的C语言,跳棋游戏C语言程序设计(数据结构课程设计).doc
跳棋游戏C语言程序设计(数据结构课程设计).doc 跳棋程序设计李雄志学号2012214157数学与应用数学12-1班1. 问题描述:2. 程序分析:3. 程序算法:4. 思考感悟.一,问题描述题目要 ...
- 猴子吃桃问题c语言链表,数据结构课程设计--猴子吃桃子问题.doc
Data organization curriculm project 数据结构课程设计 设计题目: 猴子吃桃子问题 专业班级: 通信工程0804班 学生学号: 0909082421 学生姓名: 王 ...
- C语言及数据结构课程设计:超市信息管理系统
这是大一做的一个课程设计,用到C语言和数据结构方面的知识,级别为优.代码备注较为详细,加了一些课程外的小操作以及考虑到了实际运用情况进行了补充,我把源码和演示文档及数据库都放在一起了,能直接使用,需要 ...
- 基于C语言的数据结构课程设计(学生管理系统、停车场管理、家谱管理、校园导航系统)
一.设计目的 本课程设计是软件工程学生的必修课程,数据结构与算法课程设计既是一门基础课程,又是一门实践性课程.通过本实训课程的学习和训练,使同学学会分析研究数据对象的特性,学会数据的组织方法,以便选择 ...
- 数据结构课程设计(魔王语言(c语言)的简单代码)
设计思想:此代码写的相对简单,思路易懂,用到的是栈和队列的思想,主要是对数据结构初学者起到一个参考作用: 问题描述:有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没有人能昕得懂,但他的语言是可 ...
- 设树采用孩子兄弟表示法存放.用类c语言设计算法计算树的高度.,(数据结构课程设计分类题目.doc...
(数据结构课程设计分类题目 线性表 顺序表: 1.设有一元素为整数的线性表L=(a1,a2,a3,-,an),存放在一维数组A[N]中,设计一个算法,以表中an作为参考元素,将该表分为左.右两部分,其 ...
- c语言小数表达式运算课程设计,数据结构课程设计表达式计算.doc
数据结构课程设计表达式计算 福建农林大学计算机与信息学院 计算机类 课程设计报告 课程名称:算法与数据结构课程设计题目:表达式计算姓 名:系:数学系专 业:数学与应用数学年 级:学 号:指导教师:宁正 ...
- 学生搭配问题数据结构报告c语言,数据结构课程设计_学生搭配问题.doc
数据结构课程设计_学生搭配问题 数据结构课程设计 题 目: 学生搭配问题 学 院: 班 级: 学 生 姓 名: 学 生 学 号: 指 导 教 师: 2012 年 12 月 3 日 课程设计任务书 姓名 ...
- 数据结构 -- 魔王语言解释
这是数据结构的实验~~ 这是实现一个魔王语言解释器. 这里是采用栈,队列,线性表的综合实现的. 这个程序没上交,所以是中文注释的. 其实这个程序本身实用性不强,但是是个很不错的题目. Experime ...
最新文章
- C#——WPF的菜单栏、工具栏、状态栏DEMO
- Microsoft Visual Studio 正忙
- 36 | 套路篇:怎么评估系统的网络性能?
- java ssm使用存储过程_java调用oracle存储过程(ssm)
- 全面解析 Netflix 的微服务架构设计
- Tensorflow Serving Docker compose 部署服务细节(Ubuntu)
- Linux实战 | 搭建Linux(CentOS6.8版)_1
- asp.net listview 字段太多 滚动条_高考英语阅读理解生僻单词太多怎么办?十大招数帮到你...
- C++_实现一个简单的智能指针shared_ptr
- SET-Priority_Queue
- JDK有三种字体绘制系统
- activitygroup
- 基于STM32设计的WiFi语音播报日程表
- 慕课网-前端课程学习完成
- vivado error:Multiple declarations of unsigned included via multiple use clauses
- 苹果手机计算机软件删了怎么再装,iphone用itunes重装手机系统的方法 iphone如何重装系统...
- 怎样在Mac上为 Apple ID 设置双重认证?
- 云虚拟主机数据库连接和url重写
- 因特网上的英语学习资源
- Oracle数据库打补丁方法