设计思想:此代码写的相对简单,思路易懂,用到的是栈和队列的思想,主要是对数据结构初学者起到一个参考作用;
问题描述:有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没有人能昕得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的

在这两种形式中,从左到右均表示解释。试写一个魔王语言的解释系统,把他的话解释成人能听得懂的话。
[设计要求]:
用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言的词汇:小写字母表示人的语言词汇:希腊字母表示可以用大写字母或小写字母代换的变量。魔王语言可含人的词汇。

完整代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_CHAR 100 //输入字符串的最大长度
#define OK 1;
#define ERROR -1;

typedef int status;
typedef char ElemType;

//处理队列,存放处理后的小写字母组成的字符串语言
typedef struct Stack_Node
{
ElemType data ;
struct Stack_Node *next ;
}NODE,*PNODE;

//栈的结构体
typedef struct stack
{
PNODE front;
PNODE rear;
}STACK,*PSTACK;

//栈初始化
PNODE init(void)
{
PNODE s = (PNODE)malloc(sizeof(NODE));
s->next = NULL;
return s;
}
//压栈
void push(PNODE s,ElemType x)
{
PNODE p = (PNODE)malloc(sizeof(NODE));
p->data = x;
p->next = s->next;
s->next = p;
}
//出栈
ElemType pop(PNODE s,ElemType *x)
{
PNODE p = s->next;
*x = p->data;
s->next = p->next;

 free(p);
return (*x);

}
//队列的初始化
PSTACK init1(void)
{
PSTACK pS = (PSTACK)malloc(sizeof(STACK));
pS->rear = (PNODE)malloc(sizeof(NODE));
pS->front = pS->rear;
pS->rear->next = NULL;
return pS;
}

void Insert_Queue(PSTACK Q,ElemType e)
/* 将数据元素e插入到链队列Q的队尾 /
{
PNODE p=(PNODE)malloc(sizeof(NODE)) ;
/
申请新结点失败,返回错误标志 /
p->data=e ; p->next=NULL ; /
形成新结点 */
Q->rear->next = p;
Q->rear = p;

}
void Delete_LinkQueue(PSTACK Q, int * x)
{
PNODE p ;
if (Q->frontQ->rear) return; /* 队空 /
p=Q->front->next ; /
取队首结点 /
* x = p->data;
Q->front->next=p->next ; /
修改队首指针 */
if (pQ->rear) Q->rear=Q->front ;
/* 当队列只有一个结点时应防止丢失队尾指针 */
free§ ;
}

void importA (PSTACK Q) {
Insert_Queue(Q,‘s’);
Insert_Queue(Q,‘a’);
Insert_Queue(Q,‘e’);
}

void importB (PSTACK Q) {
Insert_Queue(Q,‘t’);
importA (Q);
Insert_Queue(Q,‘d’);
importA (Q);
}

//遍历队列
void QueueTraverse(PSTACK Q)
{
PNODE p = Q->front->next;
while§
{
printf("%c",p->data);
p = p->next;
}
printf("\n");
}

//1.输入原始语言并获取长度
void GetLanguage(char *language,int *length){
printf(“请输入魔王的语言:”);
gets(language);
*length = strlen(language);
printf(“您输入的魔王语言为:”);
int i;
for(i = 0;i<*length;i++){
printf("%c “,language[i]);
}
printf(”\n该魔王语言的长度为:%d\n\n",*length);
}

//2.分情况处理原始字符
void Transformation(char *language,int *length,PNODE S,PSTACK Q){
printf ("----------判定开始----------\n");
int i;
char c;
for (i=0;i<*length;i++){
//如果language[i]为‘A’或‘B’时:
if(language[i]‘A’||language[i]‘B’){
/调用函数,使相应的字符进入‘处理队列’/
if (language[i]‘A’) {
importA(Q);
}
if (language[i]‘B’) {
importB(Q);
}
}
//如果language[i]为‘(’时:
if(language[i]’(’){
/调用函数,使后续的字符进入‘处理栈’,并在遇到“)”时元素出栈进入‘处理队列’并返回/
char c1 = language[i+1];
i++;
do
{
push(S,language[i]);
++i;
}while(language[i]!=’)’);
while(S->next!=NULL)
{
char c = pop(S,&c);
Insert_Queue(Q,c1);
if (S->nextNULL)
break;
Insert_Queue(Q,c);
}
}
//如果language[i]为‘a—z’时:
else if(language[i]>=‘a’&&language[i]<=‘z’){
/调用函数,使相应的字符进入‘处理队列’/
Insert_Queue(Q,language[i]);
}
}
printf (“队列内内容为:”);
QueueTraverse(Q);
printf ("----------判定结束----------\n\n");
}

//3.翻译‘处理队列’中的字符串
void Translate(PSTACK Q){
/遍历‘处理队列’,根据字符依次输出相应汉字/
char c;
PNODE p = Q->front->next;
while §
{
switch (p->data)
{
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 ");
}
p = p->next;
}
}

/调用函数,使相应的字符进入‘处理队列’/

int main(){
printf("-----------------------\n");
printf(" 魔王语言解释\n");
printf("-----------------------\n");
PNODE S = init();
PSTACK Q = init1();
char language[MAX_CHAR]; /存放原始‘魔王语言’/
int length=0; /取原始‘魔王语言’的长度/
// QUEUE Q; /创建‘处理队列’,存放初步处理后的‘魔王语言’/
// InitQueue(&Q); /初始化‘处理队列’/

//1.利用‘string’输入“魔王语言”,保存至‘language[MAX_CHAR]’字符串内并获取字符串长度
GetLanguage(language,&length);

//2.将‘language[MAX_CHAR]’中的字符依次判断,传输至‘A、B函数’、‘处理栈’,转换为小写字母储存至‘处理队列’
Transformation(language,&length,S,Q);

//3.将‘处理队列’中的字符串依次判断输出相应汉字
Translate(Q);

return 0;

}
// B(ehnxgz)B

运行截图如下:

设计思路:

数据结构课程设计(魔王语言(c语言)的简单代码)相关推荐

  1. 数据结构课程设计—同学录管理系统(c语言)

    数据结构课程设计-同学录管理系统(c语言) 文章目录 前言 一.需求分析 二.总体设计 三.代码实现 四.代码说明 前言 计算机相关专业在学习数据结构这门课程时会有课程设计,我被分配到的是同学录管理系 ...

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

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

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

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

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

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

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

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

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

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

  7. c语言一元多项式课程设计,一元多项式的计算数据结构课程设计.doc

    一元多项式的计算数据结构课程设计.doc 一元多项式的计算加,减摘要题目一元多项式计算任务能够按照指数降序排列建立并输出多项式:能够完成两个多项式的相加.相减,并将结果输入:目录1引言2需求分析3概要 ...

  8. c语言实现一元多项式程序报告设计,数据结构课程设计报告一元多项式的计算..doc...

    数据结构课程设计报告一元多项式的计算. 题目:一元多项式的计算 --链表 摘要(题目) 一元多项式计算 任务:能够按照指数降序排列建立并输出多项式: 能够完成两个多项式的相加.相减,并将结果输入: 目 ...

  9. 公交换乘系统c语言,数据结构课程设计报告(公交换乘).docx

    课 程 设 计 报 告 题目: 武昌地区公交查询与换乘推荐 课程名称: 数据结构课程设计 专业班级: 学 号: 姓 名: 指导教师: 报告日期: 计算机科学与技术学院 任 务 书 设计内容 掌握图.查 ...

  10. c语言数据结构课程设计电梯,数据结构课程设计报告(模拟电梯).doc

    数据结构课程设计报告(模拟电梯) 山东理工大学计算机学院 课 程 设 计 (数据结构) 班 级姓 名学 号 指导教师 二〇一二年一月十日 课程设计任务书及成绩评定 课题名称电 梯 模 拟 Ⅰ.题目的目 ...

最新文章

  1. Android之四大组件(Activity)
  2. 【VBA研究】查找目录以下全部文件的名称
  3. 2013/8月读书计划
  4. 交叉验证 cross validation 与 K-fold Cross Validation K折叠验证
  5. 《vue+vant 文本超出两行部分省略号显示》
  6. .net 引用Com组件的几种方案
  7. php中颜色的索引值,PHP imagecolorsforindex - 取得某索引的颜色
  8. 手机相片删除了怎么恢复? 手机照片恢复方法汇总
  9. opencms mysql_IDO分享 | 如何在centos下安装OpenCMS
  10. java根据地址解析省市区信息
  11. 小学听力测试英语软件,亲测:好用的小学英语软件有哪些?这6款通通安利给大家!...
  12. 面向对象编程思想详解汇总
  13. 计算机内存不足 无法使用,电脑内存不足怎么办,教您解决电脑内存不足
  14. 2022CTFSHOW菜狗杯部分题目(四)
  15. CSS 权威指南 读书笔记(二)
  16. 中国 Google 面试 7 轮,结果...
  17. 清除微信小程序、微信H5缓存
  18. win10千万不要重置_ Win10重置此电脑功能详细使用教程
  19. php奖状生成器源码,PHP生成奖状
  20. 红轴和青轴哪个手感好 红轴和青轴哪个玩游戏好

热门文章

  1. 2022.3.11 MATLAB课程作业
  2. python爬取淘宝数据魔方_《淘宝数据魔方技术架构解析》阅读笔记
  3. 【警告:操作失误造成硬盘毁灭性故障】
  4. 苹果手机代理charles(此链接非私人连接)
  5. 路由器卫士有android-,路由器卫士APP全面介绍
  6. 自学python有什么建议,想通过自学Python,朋友们有哪些提议吗?
  7. 使用gradle集成360加固
  8. intellij idea 缓存清理,c盘 系统盘清理
  9. 一文读懂C#中的抽象类、抽象方法、virtual虚函数、override重写函数及父类子类构造函数和析构函数的执行顺序
  10. PanDownload复活了!60MB/s!附下载地址