[基本要求]

用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量。魔王语言可含人的词汇。

(1)B -> tAdA

(2)A -> sae

[测试数据]

B(ehnxgz)B解释成tsaedsaeezegexenehetsaedsae

【实现】将需要解释的魔王语言当成一个字符数组,入栈1。再依次出栈,入栈2,依次处理顶端字符,若是开括号逐一出栈入队列,直至闭括号出栈。再逐一出队列,按照规则2解释,再重新入栈2。出栈2,按照规则1解释。

#include

#include

#include

#include

typedef struct Node //节点

{

char data;

struct Node *next;

}Node,*NodePtr;

typedef struct Stak //栈链表

{

NodePtr top;

NodePtr bot;

int count;

}Stak;

//初始化栈

void InitStak(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;

}

//入栈

void Push(Stak *S, char e)

{

NodePtr pnew = (NodePtr)malloc(sizeof(Node));

pnew->data = e;

pnew->next = S->top;

S->top = pnew;

S->count++;

}

//出栈

char Pop(Stak *S)

{

NodePtr p;

if (S->bot == S->top)

{//空时返回1 删除失败

exit(1);

}

p = S->top;

char e = p->data;

S->top = S->top->next;

free(p);

S->count--;

return e;

}

//打印栈

void prin(Stak *S)

{

NodePtr p;

p = S->top;

while (p != S->bot)

{

printf("%c\n",p->data);

p = p->next;

}

}

bool EmptyStack(Stak *S)

//判断是否空栈

{

if (S->count == 0)

return 1;

return 0;

}

typedef struct QNode //队列节点

{

char data;

struct QNode *next;

}QNode,*QNodePtr;

typedef struct LinkQueue //队列链表

{

QNodePtr front, rear;

}Queue;

//队列初始化

void InitQue(Queue *Q)

{

QNodePtr p = (QNodePtr)malloc(sizeof(QNode)); //p为头节点

p->data = NULL;

p->next = NULL;

Q->front = p;

Q->rear = p;

}

//入队列

void EnQue(Queue *Q, char e)

{

QNodePtr p = (QNodePtr)malloc(sizeof(QNode));

p->data = e;

p->next = NULL;

Q->rear->next = p;

Q->rear = p;

}

char DeQue(Queue *Q)

//出队列

{

QNodePtr p;

char c;

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);

return c;

}

void pri(Queue *Q)

//打印队列

{

QNodePtr p;

p = Q->front;

if (p != NULL)

{

while (p != Q->rear)

{

printf("%c", p->next->data);

p = p->next;

}

}

}

bool EmptyQue(Queue *Q)

{

if (Q->front == Q->rear)

return 1;

return 0;

}

void Reverse(char M[], Stak *S)

{

int i;

int len = strlen(M);

int l = 0, r = 0;

for (i =0; i

{

Push(S, M[i]);

if (M[i] == '(')

l++;

if (M[i] == ')')

r++;

}

if (l != r)

exit(1);

}

void EnA(Queue *Q)

//规则1

{

EnQue(Q, 's');

EnQue(Q, 'a');

EnQue(Q, 'e');

}

void EnB(Queue *Q)

//规则1

{

EnQue(Q, 't');

EnA(Q);

EnQue(Q, 'd');

EnA(Q);

}

void Fpri(Queue *Q)

{

char c;

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");

}

}

}

void Tran(Stak *Sbe,Stak *Saf,Queue *Q )

{

char c;

char d;

int i=0;

while (Sbe->count != 0)

{

c = Pop(Sbe);

if (c == ')')

i = Saf->count;

else if (c == '(')

{

int j = Saf->count;

while ( j > i )

{

d = Pop(Saf);

EnQue(Q, d);

j--;

}

char e = Q->front->next->data;

DeQue(Q);

while (!EmptyQue(Q))

//规则2

{

char dl = DeQue(Q);

Push(Saf, e);

Push(Saf, dl);

}

Push(Saf, e);

}

else

Push(Saf, c);

}

while (Saf->count>0)

{

char en;

en = Pop(Saf);

if (en == 'A')

EnA(Q);

else if (en == 'B')

EnB(Q);

else

EnQue(Q,en);

}

Fpri(Q);

}

int main()

{

Stak Sf,St;

InitStak(&Sf);

InitStak(&St);

Queue Qu1;

InitQue(&Qu1);

char M[] = "B(ehnxgz)B";

Reverse(M, &Sf);

Tran(&Sf, &St, &Qu1);

getchar();

return 0;

}

魔王语言解释器C语言,[数据结构]魔王语言解释c语言实现相关推荐

  1. c语言的上级步骤,数据结构 上级程序一(C语言).doc

    数据结构 上级程序一(C语言) 程序一:顺序表的运算 #define MAX 100 #include "stdio.h" int n; int insert(int b[],in ...

  2. c语言系统的通用数据结构,(转载)C语言实现通用数据结构的高效设计

    (转载)C语言实现通用数据结构的高效设计 [复制链接] 使用宏替代模板的方案 最近在阅读一个开源的C++代码,里面用到了大量的STL里面的东西.也许是自己一直用C而很少用C++来实现算法的原因,STL ...

  3. c语言单链表功能,[数据结构]单链表(C语言)的各种功能

    06-03阅读200,000 + 链表是一种常见的基本数据结构,在此充分利用了结构指针. 链表可以动态存储和分配,即链表是一个功能非常强大的数组. 他可以在节点中定义多种数据类型,并可以根据需要随意添 ...

  4. 数据结构与算法python语言实现答案_数据结构与算法:Python语言实现 源代码 PPT 练习答案 源码.zip...

    1 60660-数据结构与算法:Python语言实现[练习答案]Solutions Manual.rar 943.25 KB 2018/11/1 12:03:34 2 __MACOSX 0 Bytes ...

  5. 数据结构中单链表的存储c语言,单链表一 - 数据结构与算法教程 - C语言网

    1. 单链表概念&设计 单链表是一种链式存取的数据结构,,链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指 ...

  6. 冒泡法排序c语言算法步骤,冒泡排序 - 数据结构与算法教程 - C语言网

    1.复杂度与稳定性 算法时间复杂度 最坏情况:O(n^2) 最好情况:O(n) 平均情况:O(n^2) 空间复杂度:S(n)=O(1) 稳定性:稳定排序 2.过程介绍(以顺序为例) 1.从第一个元素开 ...

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

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

  8. 数据结构魔王语言问题

    出处:http://blog.csdn.net/hackbuteer1/article/details/6588574 [问题描述]  有一个魔王总是使用自己的一种非常精练而又抽象的语言讲话,没有人能 ...

  9. 数据结构与算法(C语言版)---魔王语言

    1.需求分析 1.1.问题阐述 有一个魔王总是用自己一种非常精练而抽象的语言讲话,没有人能听懂,但他的语言可以逐步的转换成人的语言,他的语言由以下两种转换规则由人的语言逐步抽象上去的: (1)α-&g ...

  10. 自制计算机语言,3个步骤实现简单语言解释器(自制简易编程语言)

    前段时间,我用 javascript 重新编写了一个 16 位的虚拟机,用它实现了一个定制的 CPU 架构和汇编语言,汇编器和调试器.虽然从头编一个语言可以完全实现自己的自定义目标,但过程却及其复杂. ...

最新文章

  1. pandas.DataFrame.iterrows
  2. Oracle开发常用知识
  3. java 根据类名示例化类_Java类类getProtectionDomain()方法及示例
  4. 【服务器】挖矿病毒 kdevtmpfsi(一针见效)
  5. php 微信实时更新,微信小程序修改data使页面数据实时更新的代码示例
  6. 人不能活在舒适区里,我要趁年轻出去闯闯
  7. 动手拆解众筹明星产品安全智能锁KeyWe后,发现它不安全且无解
  8. 我用Anylogic写了一个遗传算法
  9. excel公式里用html,Excel公式中{}是什么意思?要如何用?
  10. SOFA原理学习--sofa rpc入门示例
  11. iOS SDK开发二三事
  12. Java如何实现浅克隆与深克隆_Java浅谈克隆clone
  13. WiFi通信字节乱码问题的产生原因及解决方法
  14. html图片显示详情,纯CSS鼠标经过图片视差弹出层显示详情链接按钮特效代码.html...
  15. Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 't.statis_date'
  16. python求球的表面积_python-Hypar的表面积(双曲线抛物面)
  17. [jzoj5791]【NOIP2008模拟】阶乘 (数学)
  18. Java解析Google Maps API返回的Json
  19. 为了提前预测比赛结果,于是我用Python获取比赛球员数据进行分析,结果...
  20. Mar. 6, 15:00-17:00, 1493, Strichartz analysis for Schrodinger and wave equation I by Chong Chen

热门文章

  1. whta is the前后端分离
  2. 中了勒索病毒,该如何恢复数据?
  3. 获取TrueType字体信息
  4. Python官网无法打开解决方案
  5. 服务器显示htx插槽,华硕最新推出一系列服务器及主板解决方案
  6. 2021年游戏项目的十大编程语言
  7. 重磅来袭!Typora官方主题+自定义主题完美整合
  8. 傅里叶分析 [作 者:韩 昊]
  9. libGDX游戏开发之NPC敌人事件(六)
  10. 毕马威it咨询 java_【毕马威(KPMG)工资】it咨询师待遇-看准网